Kann nicht mit PHP zur Datenbank verbinden

Hallo,

ich habe jetzt PostgreSQL 8.4 installiert, um meine PHP-Anwendung dagegen zu testen. Der Datenbankserver läuft in einer VM unter Windows XP. Der Webserver läuft auf meinem PC. Die Anwendung läuft in PHP 5.3 und verwendet PDO zur Datenbankverbindung. Das Datenbankschema habe ich lokal mit pgadmin 3 eingerichtet. Die Firewall ist entsprechend eingerichtet.

Das hat alles mal funktioniert, ich glaube mit PGSQL 8.3. Allerdings musste ich schon etliche Fehler im Setup-Skript beseitigen, so dass ich davon ausgehe, dass sich in 8.4 viel geändert hat.

U.a. kann ich jetzt eben gar nicht erst zur Datenbank verbinden. Ich verwende dafür den Benutzer “postgres”. Ich habe schon in der Datei pg_hba.conf folgende Zeile eingefügt und die vorhandenen auskommentiert:

host all all trust

Ich bekomme aber trotzdem diesen Fehler:

Uncaught exception ‘PDOException’ with message 'SQLSTATE[08006] [7] expected authentication request from server, but received ’

Der Fehler tritt direkt beim Instanziieren der PDO-Klasse auf.

Kann mir jemand weiterhelfen? Ich hab von PGSQL anscheinend keine Ahnung, das Handbuch hilft mir jetzt nicht mehr weiter und im Web finde ich auch keine relevanten Seiten.

Akzeptiert dein Datenbankserver Verbindungen von außen (Stichwort listen_addresses = ‘*’)?
Ansonsten schau mal in das PG-Log, was da drin steht…

Im Log steht folgendes:

2010-06-08 21:19:28 CEST LOG: ungültige IP-Adresse »trust«: Unknown host
2010-06-08 21:19:28 CEST ZUSAMMENHANG: Zeile 74 in Konfigurationsdatei »C:/Programme/PostgreSQL/8.4/data/pg_hba.conf«
2010-06-08 21:19:28 CEST FATAL: konnte pg_hba.conf nicht laden
2010-06-08 21:19:28 CEST LOG: ungültige IP-Adresse »trust«: Unknown host
2010-06-08 21:19:28 CEST ZUSAMMENHANG: Zeile 74 in Konfigurationsdatei »C:/Programme/PostgreSQL/8.4/data/pg_hba.conf«
2010-06-08 21:19:28 CEST FATAL: konnte pg_hba.conf nicht laden

Naja, steht doch alles da: deine pg_hba.conf hat einen falschen Aufbau und kann daher nicht geladen werden!

Ich hab mich nach dem hier gerichtet: Client-Authentifizierung

Wie kann ich diese Datei dann einrichten, damit ich von anderen Hosts zum Datenbankserver verbinden kann? Ich wollte mir die Antwort zu der Frage selber suchen, aber bin dabei wohl auf die falsche Quelle gestoßen. Eine passende Beispielzeile ist in der mitgelieferten Datei nicht auffindbar (zumindest nicht ohne IPv6-Kenntnisse, und ich habe noch kein funktionierendes IPv6-Netzwerk gesehen).

TYPE DATABASE USER CIDR-ADDRESS METHOD

IPv4 local connections: host all all 127.0.0.1/32 md5

Wenn du nun das Loopback-Device gegen dein Subnetz tauscht und die Auth-Methode auf trust stellst, sollte es klappen. Wichtig sind die fünf Elemente, bei dir waren es nur vier…

Danke. Nun funktioniert es. Mit “0.0.0.0/0” geht es auch. (Ich kümmer mich grad nicht um die Serversicherheit, es muss erstmal nur funktionieren.) Im gezeigten Handbuch gab es auch Zeilen mit weniger Einträgen, das scheint aber falsch oder veraltet zu sein. Ich bekomme jetzt in meinem Programm SQL-Fehler, die es so früher ganz sicher nicht gab. PGSQL 8.4 scheint wirklich ganz anders zu sein. Hab grade nachgeschaut, der letzte Test war mit Version 8.2. Muss lange her sein (Nov 2007?).

Das mit der Sicherheit merke ich :slight_smile:

Viel Erfolg!

Das Format hat sich seit 8.2 nicht geändert.
Der falsche Eintrag dürfte also mit beiden Versionen nicht funktionieren.

Weder noch. Das sind Einträge für “local”. Falls das ein öffentlich zugänglicher Server ist (und nicht nur dann!), solltest Du Dich mit Server-Sicherheit beschäftigen. Es gibt schon genug Spam-Schleudern.

Andreas

Keine Angst, der Server läuft auf meinem Rechner in einer VM, die jetzt aus ist, nur zu Testzwecken verwendet wird und irgendwann wieder platt gemacht wird. Ich habe nicht vor, PostgreSQL selbst produktiv einzusetzen.