web-dev-qa-db-fra.com

psql: FATAL: l'authentification de l'homologue a échoué pour l'utilisateur

Je viens d'installer PostgreSQL 9.4 sur Ubuntu 15.10.

  1. J'ai créé un utilisateur avec createuser -P myuser
  2. J'ai créé une base de données avec createdb -O myuser mydatabase
  3. J'ai édité pg_hba.conf et ajouté local mydatabase myuser md5
  4. J'ai redémarré PostgreSQL avec Sudo service postgresql restart

L'utilisateur myuser est uniquement un utilisateur PostgresSQL et n'a pas de compte utilisateur sur Ubuntu.

Lorsque j'essaie de me connecter à la base de données avec psql -W mydatabase myuser il échoue avec psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL est en cours d'exécution…

● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

... et écoute.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

Que dois-je faire pour me connecter avec l'utilisateur myuser à la base de données mydatabase ?

12
Daniel

Dans une nouvelle installation d'il y a quelques jours, la deuxième ligne de mon pg_hba.conf est

local   all             all              peer

Je crois que c'est celui qui fait échouer votre tentative de connexion.

L'ordre des règles importe ici: le premier qui correspond à la méthode d'accès, au nom d'utilisateur, au nom de la base de données et à la plage IP source sera pris en compte. S'il échoue, il n'y a pas de deuxième essai, donc la tentative de connexion échouera probablement. Ou, comme l'indique documentation :

Il n'y a pas de "relais" ou de "sauvegarde": si un enregistrement est choisi et que l'authentification échoue, les enregistrements suivants ne sont pas pris en compte. Si aucun enregistrement ne correspond, l'accès est refusé.

La solution est simple: supprimez la ligne ci-dessus si vous ne prévoyez pas d'utiliser l'authentification peer ou déplacez votre règle spécifique au-dessus de celle-ci.

15
dezso

Tout d'abord ... vérifiez que vous disposez des lignes autorisant l'utilisateur myuser dans pg_hba.conf. Par exemple:

# IPv4 local connections:
Host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
Host    all             all             ::1/128                 md5

Ou toute autre ligne d'autorisation pour IPV4 (et IPv6 si vous utilisez) avec: TYPE DATABASE USER ADDRESS METHOD

Après cette vérification, exécutez le psql comme suit:

psql -h localhost -U myuser mydatabase

Et puis, l'invite demandée, entrez le mot de passe de l'utilisateur myuser.

3
Alvaro Neto