Aller au contenu

Featured Replies

Posté(e)

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). :biggrin:

  • 3 mois après...
Posté(e)
  • Auteur

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 :biggrin:

Posté(e)

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é ?

Posté(e)
  • Auteur

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.

Posté(e)

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

Posté(e)
  • Auteur

Oui, l'interface ne le permet pas. :sad:

Ce n'est même pas la documentation officielle de PHP qui indique ce support, mais un commentaire d'un utilisateur... :rolleyes:

Je vais implémenter cette solution et la suggérer à Vrana si j'arrive à un résultat satisfaisant.

Posté(e)
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... :rolleyes:

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

Posté(e)
  • Auteur

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.

Posté(e)

Je viens de lire un truc ici (le hasard ...), il semble que ça fonctionne avec PDO mais pas avec pg_connect

Posté(e)
  • Auteur

Ç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_root

local   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;
GRANT
postgres=# \connect my_db
You 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é par PiwiLAbruti

Posté(e)

Donc ça fonctionne bien en socket unix (sans avoir à modifier pga_hba.conf) ?

Posté(e)
  • Auteur

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.

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.

Invité
Répondre à ce sujet…

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.