Postgres-Fehlermeldung: FATAL: Ident-Authentifizierung für Benutzer "..." fehlgeschlagen

26

Angenommen, Sie sehen diese Nachricht:

FATAL:  Ident authentication failed for user "..."

Was sind die Ursachen dieser Fehlermeldung?

Steve Bennett
quelle

Antworten:

36

Dies bedeutet, dass Postgres versucht, einen Benutzer mithilfe des Ident-Protokolls zu authentifizieren, und dies nicht kann. Ident auth funktioniert so:

  • Sie haben die Datenbankrolle 'foo' in der Datenbank 'db'
  • Ihre pg_hba.confDatei (in /etc/postgres-something/main) definiert "Ident" als das Protokoll zum Herstellen einer Verbindung zur Datenbank dbfür Benutzer, die Verbindungen von bestimmten Hosts herstellen
  • Der Unix-Benutzername, der die Verbindung herstellt, ist 'foo'
  • Ein Ident-Server, der auf dem Computer ausgeführt wird, von dem aus der Benutzer eine Verbindung herstellt, bestätigt, dass sein Benutzername wirklich "foo" ist.

Mögliche Ursachen und Lösungen:

  1. Auf dem Computer, von dem aus Sie eine Verbindung herstellen möchten, ist kein Ident-Server aktiv . Testen Sie dies, indem Sie versuchen, über Port 113 eine Verbindung herzustellen. Wenn dies fehlschlägt, installieren Sie einen Ident-Server (z sudo apt-get install oidentd. B. ).
  2. Es gibt einen Ident-Server, aber keine Datenbankrolle , die dem Namen entspricht, mit dem Sie eine Verbindung herstellen möchten ('foo' im obigen Beispiel). Erstellen Sie es also, indem Sie sich mit Superuser-Rechten irgendwie mit der Datenbank verbinden CREATE ROLE foo. Alternativ können Sie einen Eintrag zu hinzufügen /etc/postgresql/.../main/pg_ident.conf.
  3. Möglicherweise stimmt der Shell-Benutzername nicht mit der Datenbankrolle überein . Sie können dies möglicherweise testen, indem Sie während einer laufenden Verbindung eine Verbindung zum Ident-Server herstellen und die richtigen Portnummern übergeben.
  4. Vielleicht möchten Sie sich tatsächlich mit einem Passwort verbinden , nicht mit Ident. Bearbeiten Sie die pg_hba.confDatei entsprechend. Ändern Sie zum Beispiel:

    host all all 127.0.0.1/32 ident
    

    zu

    host all all 127.0.0.1/32 md5
    
Steve Bennett
quelle
2
Für Fedora ist die Datei in/var/lib/psql/data
Anwar
Ich nehme nicht an, dass jemand antworten möchte, warum postgres "ident" als Standard-Login verwendet.
ICC97
Weil das vor 20 Jahren Sinn gemacht hat und sich an * nix nie etwas geändert hat? :)
Steve Bennett
@ icc97, nichts in dieser Antwort weist darauf hin, dass "ident" die Standardanmeldung für Postgres ist. Woher hast du diese Idee? Soweit ich weiß, lautet der Standardname für die Superuser-Rolle in einem Postgres-Cluster "postgres".
Platzhalter
9

Ich bin mir nicht sicher über die Ursachen, aber das hat es für mich behoben:

im pg_hba.conf

dazu wechseln:

host all all 127.0.0.1/32 md5

Exakter Fehler: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

Jacktrades
quelle
1
"ident" ändern -> "md5" hat es für mich
getan
3

Fügen Sie unter CentOS die folgende Zeile hinzu /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

Und die anderen Einträge auskommentieren.

Natürlich ist diese Einstellung nicht sicher, aber wenn Sie nur an einer Entwicklungs-VM wie mir herumspielen, ist es wahrscheinlich in Ordnung ...

XåpplI'-I0llwlg'I -
quelle
0

Wenn Sie dies noch nicht versucht haben, überprüfen Sie Ihre Datei pg_hba.conf. Der Name lautet /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20). Möglicherweise müssen Sie 'find / -name pg_hba.conf' verwenden, um es zu finden.

Ändern Sie am Ende der Datei die 'METHOD'-Werte für lokale Tests auf' trust '(weitere Informationen finden Sie in den Postgres-Dokumenten). Starten Sie die Maschine neu, um sicherzustellen, dass alles sauber gestartet und die neuen Parameter gelesen werden.

Hoffentlich heilt dies Ihre Leiden. Es löste meine Probleme auf Fedora 20 mit PostgreSQL 9.3.

Alan Thompson
quelle
Es ist nicht erforderlich, Ihren gesamten Computer neu zu starten, wenn Sie die PostgreSQL-Konfigurationen ändern. Versuchen Sie stattdessen, pg_ctl reloadvon der Konsole aus oder SELECT pg_reload_conf();beim Ausführen von SQL als privilegierter Benutzer zu verwenden.
Benjamin