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:
1Fatal 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:
1$ psql -d db -U user
Ich lege PostgreSQL-Datenbanken inklusive Benutzer übrigens immer nach dem folgenden Schema an:
1# useradd user; passwd user
2# su - postgres
3$ psql
4CREATE USER user WITH PASSWORD pass;
5CREATE DATABASE db;
6GRANT ALL PRIVILEGES ON DATABASE db to user;
7q
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:
1# IPv4 local connections:
2host all all 127.0.0.1/32 md5
3# IPv6 local connections:
4host 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 "neuladen" nicht aus:
1# service postgresql restart
Anschließend funktionierte die Authentifizierung mittels PHP PDO. 🙂