PostgreSQL nicht über Perl:DBI erreichbar

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

PostgreSQL nicht über Perl:DBI erreichbar

Beitrag von Columbus » 22.01.2006 19:12:32

Hallo ich versuche es mal mit einem neuen Thread, da es sich jetzt doch als ein anderes Problem herausgestellt hat, und weil ich hier einfach nicht weiterkomme.

Also ich versuche auf meine PostgreSQL-Datenbank zuzugreifen (ganz einfache Sache)

Code: Alles auswählen

#!/usr/bin/perl

use warnings;
use strict;

use DBI;

my $dbh = DBI->connect ("DBI:Pg:dbname=test1", "postgres", "wunderbar")
   or die "Keine Verbindung mit der DB!\n";
Username und Passwort stimmen, mit denen kann ich mich auch mit psql einloggen.
Als Fehlermeldung bekomme ich folgendes:
DBI connect('dbname=test2','postgres',...) failed: FATAL: Ident-Authentifizierung für Benutzer »postgres« fehlgeschlagen
at ./postgre_test_1.pl line 8
Keine Verbindung mit der DB!
Meine "/etc/postgresql/8.1/main/pg_hba.conf" sieht folgendermaßen aus:

Code: Alles auswählen

# Database administrative login by UNIX sockets
local   all         postgres                          ident sameuser

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all     all
# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1       255.255.255.255          trust
# IPv6 local connections:
host    all         all         ::1/128               md5
Wo liegt der Hund begraben?

Vielen Dank vorab.

Gruss Christian[/quote]
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.01.2006 21:27:01

vermutlich baut er die Verbindung bei dir über die Unix Sockets auf

versuchs einmal mit zusätzlicher Angabe von Host und Port:

Code: Alles auswählen

#!/usr/bin/perl

use warnings;
use strict;

use DBI;

my $dbh = DBI->connect ("DBI:Pg:dbname=test1;host=localhost;port=5432", "gms", "geheim")
   or die "Keine Verbindung mit der DB!\n";
print "connected\n";
Gruß
gms

harre
Beiträge: 65
Registriert: 22.11.2004 18:50:51
Wohnort: München

Re: PostgreSQL nicht über Perl:DBI erreichbar

Beitrag von harre » 23.01.2006 07:08:45

Meine "/etc/postgresql/8.1/main/pg_hba.conf" sieht folgendermaßen aus:

Code: Alles auswählen

# Database administrative login by UNIX sockets
local   all         postgres                          ident sameuser

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all     all                                                          <--UNVOLLSTÄNDIG!!
# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1       255.255.255.255          trust     <-- der ist Komplett!!
# IPv6 local connections:
host    all         all         ::1/128               md5
Servus,
wenn ich mich dunkel entsinne, geht DBI über den Host-Eintrag,
der Eintrag "host all all" ist falsch, du mußt noch eine IP-Maske für die erlaubten IP-Adressen sowie eine Netzmaske angeben, außerdem fehlt noch die Authentifizierungsart. Näheres steht in der pg_hba.conf selbst sowie in der Dokumentation.

Gruß
Harre

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 23.01.2006 13:47:48

Ne, die pg_hba.conf ist schon ok. Das Problem ist, dass er Ident als Authentifizierung fuer localhost eingestellt hat und das kann nicht klappen, da das CGI unter dem User www-data daherkommt, aber er aber als User postgres rein will.
Am besten duerfte sein, die IP einer Netzwekkarte zu nutzen, dann kommt der host-Einrag zum Zug. 127.0.0.1 ist ja nur localhost und fuer Postgres ist das eine Verbindung, die unter den Punkt local faellt ;)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.01.2006 14:33:43

nepos hat geschrieben:127.0.0.1 ist ja nur localhost und fuer Postgres ist das eine Verbindung, die unter den Punkt local faellt ;)
ne
"local" ist eine Verbindung über Unix Domain Sockets (Kommunikation über Filesystem)
"host" ist eine Verbindung über Internet Domain Sockets (Kommunikation über TCP)

Wenn er als Connectionstring "DBI:Pg:dbname=test1;host=127.0.0.1;port=5432" angibt, ist das erzwungenermaßen eine Verbindung über "host" und nicht über "local".

Gruß
gms

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 23.01.2006 16:38:18

Das verrückte ist, im Moment kann ich nur mit psql auf die Datenbank zugreifen. Was mich auch noch irritiert, und das ganz besonders: Die Option "tcpip_connections = true" erkennt er nicht. In der offiziellen Sarge-Version war das die Option mit der man IP-Verbindungen zulässt, diese war von vornerein schon in der postgresql.conf eingetragen. Der Backport von PostgreSQL in der Version 8.1 kennt diese Option nicht mehr! Obwohl sie in der Doku steht.

Mein oben gezeigtes Skript hat mit der Sarge-Version von PostgreSQL prima funktioniert, nur mit dem Backport nicht mehr. Man sollte Backports ......
Also ich werde das ganze wohl wieder runterwerfen. Der Schöpfer des Backports meldet sich nicht... und ich muß mit meinem Projekt bald fertig werden!

Ich meine es sollte doch möglich sein den Datenbank-Server über DBI anzusprechen, ohne über die Netzwerkebene zu gehen, ja und selbst das geht nicht.
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.01.2006 17:07:36

Columbus hat geschrieben:Ich meine es sollte doch möglich sein den Datenbank-Server über DBI anzusprechen, ohne über die Netzwerkebene zu gehen, ja und selbst das geht nicht.
Das sollte so funktionieren:

Code: Alles auswählen

my $dbh = DBI->connect ("DBI:Pg:dbname=test1", "", "")
vorrausgesetzt der Prozeßowner ist als User/Rolle in der DB definiert

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 23.01.2006 17:20:34

Negativ, da gibt er mir das aus:
DBI connect('dbname=test2','',...) failed: konnte nicht mit dem Server verbinden: øí·x"ð·
Läuft der Server lokal und akzeptiert er Verbindungen
auf dem Unix-Domain-Socket »/var/run/postgresql/.s.PGSQL.5432«?
at ./postgre_test_1.pl line 8
Keine Verbindung mit der DB!
Aber der Entwickler des Backports hat sich gemeldet. Vielleicht kann er was rausfinden.

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

Antworten