Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: Lästigpassword authentication failed for user

PostgreSQL: password authentication failed for user

PostgreSQL meldet „password authentication failed“? Falsches Passwort, falscher Nutzer oder pg_hba.conf erlaubt die Methode nicht. So kommst du rein.

Aufwand:
ca. 20 Min.
Voraussetzung:
Zugriff als PostgreSQL-Superuser (meist der Systemnutzer postgres)
Gilt für:
PostgreSQL

Das Symptom

Eine App oder ein psql-Aufruf kommt nicht mehr an die Datenbank und meldet FATAL: password authentication failed for user "appuser". Gestern lief noch alles, oder das Setup ist frisch und will partout keine Verbindung annehmen. Das Passwort sieht im Connection-String korrekt aus, und trotzdem bleibt die Tür zu.

Die „Layer 8“-Wahrheit

Diese Meldung ist absichtlich vage – und genau das führt in die Irre. Sie sagt nicht „falsches Passwort“, sondern nur „Passwort-Anmeldung fehlgeschlagen“, und dahinter verbergen sich mehrere sehr verschiedene Ursachen, die PostgreSQL bewusst nicht auseinanderhält, damit niemand über die Fehlermeldung gültige Nutzernamen errät. Der harmloseste Fall ist tatsächlich ein falsches oder veraltetes Passwort in der App. Fast ebenso häufig existiert die Rolle gar nicht wie geschrieben, oder es wurde für sie nie ein Passwort gesetzt – dann muss die Passwort-Anmeldung zwangsläufig scheitern.

Der tückischste Fall aber liegt in pg_hba.conf, der Zugangsregel-Datei, die vor jeder Prüfung entscheidet, welche Anmeldemethode für welche Herkunft überhaupt gilt. Erwartet die passende Zeile eine andere Methode als das Passwort, das die App schickt, hilft das korrekteste Passwort nichts. Deshalb lohnt es sich, die Verbindung mit genau den Parametern der App nachzustellen: Eine lokale Anmeldung über den Unix-Socket landet oft auf einer ganz anderen Regel als dieselbe über TCP. Wer erst die Zugangsdaten prüft, dann die Rolle, und zuletzt pg_hba.conf, findet die richtige der drei Türen – statt blind am falschen Schloss zu drehen.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Zugangsdaten und Rollennamen prüfen

    Zuerst die naheliegende Ursache ausschließen: Stimmt der Rollenname, ist das Passwort aktuell? Als Superuser nachsehen, ob die Rolle überhaupt existiert und anmelden darf. Nicht per curl gegen Port 5432 testen – PostgreSQL spricht kein HTTP, dafür ist psql da:

    sudo -u postgres psql -c "\du appuser"
    
  2. 2.

    Ein Passwort setzen oder zurücksetzen

    Hat die Rolle kein oder ein falsches Passwort, als Superuser ein neues setzen. Das behebt sowohl den Fall „nie ein Passwort vergeben“ als auch schlicht ein vergessenes Passwort:

    sudo -u postgres psql -c "ALTER ROLE appuser WITH PASSWORD 'einNeuesGeheimnis';"
    
  3. 3.

    Die Verbindung gezielt nachstellen

    Mit denselben Parametern anmelden, die auch die App verwendet – Host, Nutzer und Datenbank explizit angeben. So trennst du „falsche Zugangsdaten“ von „pg_hba.conf blockiert“, denn eine lokale Anmeldung über den Socket läuft oft über eine andere Regel als eine über TCP:

    psql "host=127.0.0.1 port=5432 user=appuser dbname=appdb"
    
  4. 4.

    pg_hba.conf verstehen und anpassen

    Scheitern selbst korrekte Zugangsdaten, entscheidet pg_hba.conf. Jede Zeile bindet Verbindungstyp, Datenbank, Nutzer und Herkunft an eine Methode. Für passwortbasierte Anmeldung sollte in der passenden Zeile scram-sha-256 stehen, nicht ident oder peer. Den Pfad der Datei erfragen und die Regeln prüfen:

    sudo -u postgres psql -c "SHOW hba_file;"
    
  5. 5.

    Konfiguration neu einlesen

    Änderungen an pg_hba.conf werden nicht automatisch aktiv. Ein Reload liest die Regeln neu ein, ohne bestehende Verbindungen zu trennen – ein voller Neustart ist dafür nicht nötig:

    sudo -u postgres psql -c "SELECT pg_reload_conf();"
    

Häufige Fragen (FAQ)

?Das Passwort stimmt garantiert – warum werde ich trotzdem abgewiesen?

Weil „password authentication failed“ nicht nur bei falschem Passwort erscheint. Dieselbe Meldung kommt, wenn der angegebene Rollenname gar nicht existiert, wenn für die Rolle nie ein Passwort gesetzt wurde (dann schlägt die Passwort-Anmeldung grundsätzlich fehl) oder wenn pg_hba.conf für diese Verbindung eine andere Methode erzwingt. PostgreSQL verrät bewusst nicht, welcher der Fälle vorliegt, damit Angreifer keine gültigen Nutzernamen erraten können.

?Muss ich pg_hba.conf oder das Passwort anfassen?

Kommt darauf an. Verbindest du dich aus einer App mit falschen oder veralteten Zugangsdaten, reicht das richtige Passwort im Connection-String. Existiert die Rolle nicht oder hat kein Passwort, setzt du es mit ALTER ROLE. Erst wenn selbst korrekte Zugangsdaten scheitern, liegt es an pg_hba.conf – etwa an einer trust- oder ident-Zeile, die eine ganz andere Anmeldung erwartet, als die App liefert.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWLästigconnection refused

PostgreSQL: Connection refused auf Port 5432

Die App erreicht die Datenbank nicht — Connection refused? Meist lauscht PostgreSQL nur auf localhost oder die Client-Freigabe in pg_hba.conf fehlt.

SWLästigAccess denied for user

MySQL: Access denied for user

Der Login wird abgewiesen, obwohl das Passwort stimmt? Bei MySQL zählt auch, von welchem Host aus man kommt — der Benutzer ist an eine Herkunft gebunden.

SWLästigsorry, too many clients already

PostgreSQL: too many clients already

Die Datenbank weist neue Verbindungen ab? Das Verbindungslimit ist erreicht — meist, weil eine App Verbindungen nicht schließt oder ein Pool fehlt.