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. 🙂

Übersetzungen: