psql: FATAL: Peer-Authentifizierung für Benutzer fehlgeschlagen

12

Ich habe gerade PostgreSQL 9.4 unter Ubuntu 15.10 installiert.

  1. Ich habe einen Benutzer mit erstellt createuser -P myuser
  2. Ich habe eine Datenbank mit erstellt createdb -O myuser mydatabase
  3. Ich habe bearbeitet pg_hba.confund hinzugefügtlocal mydatabase myuser md5
  4. Ich habe PostgreSQL mit neu gestartet sudo service postgresql restart

Benutzer myuser ist nur ein PostgresSQL-Benutzer und hat kein Benutzerkonto unter Ubuntu.

Wenn ich versuche, eine Verbindung zur Datenbank psql -W mydatabase myuserherzustellen, schlägt dies mit fehl psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL läuft…

 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.

... und zuhören.

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

Was muss ich tun, um eine Verbindung mit dem Benutzer myuser zur Datenbank mydatabase herzustellen ?

Daniel
quelle

Antworten:

15

In einer Neuinstallation von ein paar Tagen, die zweite Zeile meines pg_hba.confheißt

local   all             all              peer

Ich glaube, dies ist derjenige, der Ihren Verbindungsversuch zum Scheitern bringt.

Hierbei spielt die Reihenfolge der Regeln eine Rolle: Die erste, die der Zugriffsmethode, dem Benutzernamen, dem Datenbanknamen und dem Quell-IP-Bereich entspricht, wird berücksichtigt. Wenn dies fehlschlägt, gibt es keinen zweiten Versuch, sodass der Verbindungsversuch wahrscheinlich fehlschlägt. Oder wie in der Dokumentation angegeben :

Es gibt kein "Durchfallen" oder "Sichern": Wenn ein Datensatz ausgewählt wird und die Authentifizierung fehlschlägt, werden nachfolgende Datensätze nicht berücksichtigt. Wenn kein Datensatz übereinstimmt, wird der Zugriff verweigert.

Die Lösung ist einfach: Entfernen Sie entweder die obige Zeile, wenn Sie keine peerAuthentifizierung verwenden möchten, oder verschieben Sie Ihre spezifische Regel über diese.

dezso
quelle
Das Verschieben der Linie hat funktioniert.
Daniel
Wie können wir das Passwort mit einer 'md5'-Authentifizierung speichern, damit wir es nicht immer wieder eingeben müssen ...?
sk
3

Zuerst ... überprüfen Sie, ob Sie die Zeilen haben, die dem Benutzer myuser in pg_hba.conf erlauben. Zum Beispiel:

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

Oder andere Berechtigungszeilen für IPV4 (und IPv6, falls Sie diese verwenden) mit: TYPE DATABASE USER ADDRESS METHOD

Führen Sie nach dieser Überprüfung die Datei psql wie folgt aus:

psql -h localhost -U myuser mydatabase

Geben Sie dann bei der angeforderten Eingabeaufforderung das Kennwort myuser des Benutzers ein.

Alvaro Neto
quelle
1
Entfernen Sie natürlich die Peer-Authentifizierung.
Alvaro Neto
Lassen Sie eine Instanz aktualisieren, um Remoteverbindungen zuzulassen. Die Abhöradresse wird auf gesetzt '*'und die host all all 0.0.0.0/0 md5Regel hinzugefügt . Musste die Peer-Authentifizierung nicht entfernen. -h localhostIch habe gerade mit dem Parameter gearbeitet. Beste Antwort, da Sie bei einer Standardinstallation höchstwahrscheinlich nicht die Konfiguration berühren müssen.
Mark Carpenter Jr.