Je viens d'installer PostgreSQL 9.4 sur Ubuntu 15.10.
createuser -P myuser
createdb -O myuser mydatabase
pg_hba.conf
et ajouté local mydatabase myuser md5
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 ?
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.
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.