PiwiLAbruti Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 Avec les changements apportés par DSM 6, je n'arrive plus à connecter adminer à la base pgsql du NAS. Je me doute bien qu'il faille modifier le fichier /etc/postgresql/pg_hba.conf pour ajouter des accès autres que local, mais les modifications apportées à ce dernier sont effacées à chaque redémarrage du service pgsql. Et j'ai la flemme de creuser (pour une fois). 0 Citer
PiwiLAbruti Posté(e) le 1 février 2017 Auteur Posté(e) le 1 février 2017 Comme tout le monde s'en fout, j'ai finalement réussi à parvenir à un résultat presque correct : login as: admin admin@DiskStation’s password: ************ admin@DiskStation:~$ sudo -i Password: ************ root@DiskStation:~# su - postgres postgres@DiskStation:~$ psql psql (9.3.6) Type “help” for help. postgres=# \du List of roles Role name | Attributes | Member of ----------------------------+------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication | {} postgres=# CREATE USER admin PASSWORD '************' SUPERUSER CREATEDB CREATEROLE; CREATE ROLE postgres=# \du List of roles Role name | Attributes | Member of ----------------------------+------------------------------------------------+----------- admin | Superuser, Create role, Create DB | {} postgres | Superuser, Create role, Create DB, Replication | {} postgres=# \q postgres@DS411:~$ exit logout root@DS411:~# vi /etc/postgresql/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD local all postgres peer map=pg_root local all all peer host all admin 127.0.0.1/32 trust root@DS411:~# synoservicectl -restart pgsql pgsql restarted. root@DS411:~# synoservicectl -status pgsql pgsql start/running root@DS411:~# exit logout admin@DS411:~$ exit L'un des défauts possibles est que la modification de pg_hba.conf ne soit pas permanente. Sinon ça fonctionne très bien 0 Citer
Fenrir Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 D'après les release notes, adminer peut se connecter via un socket depuis 2009, donc pas besoin d'autoriser une connexion host (réseau) normalement. En php il suffit de ne pas renseigner le nom d'hôte (ou de mettre le chemin du socket), tu as testé ? 0 Citer
PiwiLAbruti Posté(e) le 1 février 2017 Auteur Posté(e) le 1 février 2017 Du coup il faut saisir quoi dans le champ Serveur ? Car en ne mettant rien et en utilisant le compte postgres, impossible de se connecter. 0 Citer
Fenrir Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 En php, il suffit de ne rien saisir Citation It's not explicitly stated here, but you can also connect to PostgreSQL via a UNIX domain socket by leaving the host empty. This should have less overhead than using TCP e.g.: $dbh = new PDO('pgsql:user=exampleuser dbname=exampledb password=examplepass'); Je ne sais si ton interface le permet 0 Citer
PiwiLAbruti Posté(e) le 2 février 2017 Auteur Posté(e) le 2 février 2017 Oui, l'interface ne le permet pas. Ce n'est même pas la documentation officielle de PHP qui indique ce support, mais un commentaire d'un utilisateur... Je vais implémenter cette solution et la suggérer à Vrana si j'arrive à un résultat satisfaisant. 0 Citer
Fenrir Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Il y a 2 heures, PiwiLAbruti a dit : Ce n'est même pas la documentation officielle de PHP qui indique ce support, mais un commentaire d'un utilisateur... Citation Parameters ¶ connection_string The connection_string can be empty to use all default parameters Il se trouve que le paramètre par défaut de pgsql (et de mysql) c'est l'utilisation d'un socket unix 0 Citer
PiwiLAbruti Posté(e) le 2 février 2017 Auteur Posté(e) le 2 février 2017 Avant DSM 6, il suffisait de saisir admin comme login et on accédait directement à la base PgSQL. Depuis DSM 6, impossible de se connecter avec l'utilisateur postgres (admin n'existe plus). Après avoir retiré le host des chaînes de connexion de de la fonction pg_connect() , j'obtiens le message PostgreSQL is not a open service. Je vais simplement ouvrir un ticket sur GitHub. 0 Citer
Fenrir Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Je viens de lire un truc ici (le hasard ...), il semble que ça fonctionne avec PDO mais pas avec pg_connect 0 Citer
PiwiLAbruti Posté(e) le 2 février 2017 Auteur Posté(e) le 2 février 2017 (modifié) Ça ne vient pas de Adminer mais de la configuration de PostgreSQL dont j'ai pris le temps de lire la documentation concernant le fichier pg_hba.conf. Par défaut ce fichier contient : # TYPE DATABASE USER ADDRESS METHOD local all postgres peer map=pg_rootlocal all all peer Ça signifie que l'authentification repose sur celle des comptes utilisateur du NAS. Par contre, il faut leur avoir préalablement attribué les droits nécessaires : postgres=# GRANT CONNECT ON DATABASE my_db TO my_user;GRANTpostgres=# \connect my_dbYou are now connected to database "my_db" as user "postgres".postgres=# GRANT SELECT ON TABLE my_table TO my_user;GRANT J'ai donc ajouté certains droits au compte http (compte par défaut de Web Station) et j'ai simplement vérifié le succès de la connexion avec la chiure de PHP suivante (pas encore réussi avec pg_connect()) : try{ $pdo = new PDO('pgsql:dbname=my_db'); }catch (\Exception $e){ var_dump($e); } var_dump($pdo); // Retourne un objet de type PDO Bref, ça fonctionne très bien dans l'absolu même si Synology a voulu rendre PostgreSQL peu accessible à ses utilisateurs. Dernière remarque, un paquet (pour lequel on crée un compte utilisateur dédié sur le NAS) qui aurait besoin de cette base de donnée peut y avoir accès facilement avec les bons droits (bête script à l'installation du paquet). Modifié le 2 février 2017 par PiwiLAbruti 0 Citer
Fenrir Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Donc ça fonctionne bien en socket unix (sans avoir à modifier pga_hba.conf) ? 0 Citer
PiwiLAbruti Posté(e) le 3 février 2017 Auteur Posté(e) le 3 février 2017 Oui, sans modifier pg_hba.conf. La ligne local all all peer permet à tous les utilisateurs déclarés dans /etc/passwd d'accéder à PostgreSQL. Tout ce qui est dans /var/services/web est exécuté avec le compte http par défaut, il faut juste prévoir les autorisations les accès avec les commandes GRANT précédemment décrites. 0 Citer
Fenrir Posté(e) le 3 février 2017 Posté(e) le 3 février 2017 Voilà qui simplifie grandement les choses 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.