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


12

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.confet ajoutélocal mydatabase myuser md5
  4. J'ai redémarré PostgreSQL avec sudo service postgresql restart

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

Lorsque j'essaie de me connecter à la base de données, psql -W mydatabase myuserelle é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 ?

Réponses:


16

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

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 la documentation :

Il n'y a pas de "transfert" 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' peerauthentification ou déplacez votre règle spécifique au-dessus de celle-ci.


Déplacer la ligne a fonctionné.
Daniel

Comment pourrions-nous stocker le mot de passe en utilisant une authentification 'md5' afin de ne pas avoir à le taper encore et encore ...?
sk

3

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.


1
Et bien sûr, supprimez l'authentification par les pairs.
Alvaro Neto

J'ai une instance que j'ai mise à jour pour autoriser les connexions à distance, l'adresse d'écoute est définie sur '*'et a ajouté la host all all 0.0.0.0/0 md5règle. N'a pas eu à supprimer l'authentification par les pairs. Je viens de travailler avec le -h localhostparam. Meilleure réponse, car vous n'avez probablement pas à toucher à la configuration lors d'une installation standard.
Mark Carpenter Jr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.