Kurztipp: PostgreSQL-Fehler „SQLSTATE[08006] [7] FATAL: Ident authentication failed“

Beim Testen einer Web-Anwendung, die mittels PHP PDO eine Verbindung zu einer PostgreSQL-Datenbank herstellt, bin ich auf die folgende Fehlermeldung gestoßen:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] FATAL: Ident authentication failed for user "user"' in xxx.php

Kurioserweise ließ sich über die Konsole unter der angegebenen Benutzerkennung jedoch eine Datenbankverbindung herstellen:

$ psql -d db -U user

Ich lege PostgreSQL-Datenbanken inklusive Benutzer übrigens immer nach dem folgenden Schema an:

# useradd user; passwd user
# su - postgres
$ psql
CREATE USER user WITH PASSWORD pass;
CREATE DATABASE db;
GRANT ALL PRIVILEGES ON DATABASE db to user;
q

In meinem Fall war die Fehlerursache die Konfiguration der PostgreSQL-Authentifizierung (Host-based authentification) – ich musste die folgenden Zeilen der Datei /var/lib/pgsql/data/pg_hba.conf anpassen:

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

Gegenüber der Standard-Konfiguration werden für lokale Verbindungen anstatt der ident-Authentifizierung (Authentifizierung über ident-Server) nun mit MD5 gehashte Passwörter verwendet. Wichtig ist, dass diese Einstellung sowohl für IPv4 als auch für IPv6 vorgenommen wird. Nach Anpassung der Konfigurationsdatei muss der Datenbankserver u.U. neugestartet werden – in meinem Fall reichte ein „reloadnicht aus:

# service postgresql restart

Anschließend funktionierte die Authentifizierung mittels PHP PDO. 🙂

Sharing is caring

2 Kommentare Schreibe einen Kommentar

    • Hallo madddi,
      bei meiner Enterprise Linux 6-Installation hat es nicht ausgereicht. Bei neueren Anwendungsversionen kann das durchaus anders sein. Funktioniert das bei dir ohne Neustart? Wenn ja, welche Distribution/PostgreSQL-Version nutzt Du?
      Habe den Artikel mal angepasst!

      Beste Grüße,
      Christian.

Schreibe einen Kommentar