Anfängerfrage: Verbindung "als Benutzer" nicht möglich: Ident-Authentifizierung fehlg

Hallo zusammen!

Als Datenbankneuling habe ich mir das Buch “PostgrSQL. Installation, Grundlagen, Praxis” gekauft und scheitere auf Seite 25: Da wird ein Benutzer psbuch angelegt (siehe unten (1)), dann eine Datenbank postgresqlbuch (siehe unten (2)), und schließlich soll man mit der Datenbank postgresqlbuch Verbindung aufnehmen (3). Und diese Verbindung klappt nicht; ich bekomme die Fehlermeldung “Ident-Authentifizierung für Benutzer >>psbuch<< fehlgeschlagen \ Vorherige Verbindung wurde behalten.”

Meine Frage ist: Wie stelle ich eine Verbindung zur DB postgresqls als Benutzer psbuch her?

Das habe ich eingegeben:

(1) Benutzer erstellen:
postgres=# CREATE USER psbuch WITH NOSUPERUSER ENCRYPTED
PASSWORD ‘hallo123’;
CREATE ROLE

(2) Datenbank erstellen:
postgres=# CREATE DATABASE postgresqlbuch OWNER=psbuch
TEMPLATE=template1;
CREATE DATABASE

(3) Verbindung aufnehmen:
postgres=#\c postgresqlbuch psbuch
FATAL: Ident-Authentifizierung für Benutzer >>psbuch<< fehlgeschlagen
Vorherige Verbindung wurde behalten.

Ich verwende PostgreSQL 8.4.5 unter Ubuntu 10.04.
Bei der Installation über die Paketverwaltung gab es keine Probleme.

(4) \du zeigt Folgendes:
postgres=#\du
psbuch | | {}

Nach einigem Suchen im Netz kam ich auf den Trichter, dass die Datei pg_hba.conf etwas mit Benutzern zu tun hat. Die sieht bei mir am Ende so aus:

— schnipp

Database administrative login by UNIX sockets

local all postgres ident

TYPE DATABASE USER CIDR-ADDRESS METHOD

“local” is for Unix domain socket connections only

local all all ident

IPv4 local connections:

host all all 127.0.0.1/32 md5

IPv6 local connections:

host all all ::1/128 md5
-# Database administrative login by UNIX sockets
local all postgres ident

TYPE DATABASE USER CIDR-ADDRESS METHOD

“local” is for Unix domain socket connections only

local all all ident

IPv4 local connections:

host all all 127.0.0.1/32 md5

IPv6 local connections:

host all all ::1/128 md5
— schnapp

Ob da der Benutzer psbuch auftauchen muss, weiß ich nicht. Wenn er auftauchen muss, weiß ich nicht, warum die oben (aus dem Buch abgeschriebenen und hier) wiedergegebenen Befehle nicht dafür sorgen.

(Übrigens kann man auch keine Verbindung als Benutzer X herstellen, wenn X über pgAdmin III angelegt wurde, wie es auf Seite 40 - 43 mit dem Grant-Assistenten beschrieben wird. Aber das will ich jetzt hier nicht diskutieren.)

Für Hilfe bedankt sich jetzt schon

Sandbank

Ich kenne so ein Buch nicht. Welche ISBN hat das Buch denn?

Und ja, du hast Recht. Du müsstest die pg_hba.conf anpassen.

Wenn du diese Datenbank nur lokal verwendest, dürften am Anfang zwei Zeilen wie:

local all all trust
host all all 127.0.0.1/32 trust

ausreichen.

Stümperhafte Konkurrenz, gell?

Andreas

Zuallererst: Herzlichen Dank für die prompte Antwort!!!

Als nächstes die vollständigen Angaben zum Buch:
Thomas Pfeiffer, Andreas Wenk: PostgreSQL. Installation, Grundlagen, Praxis. Galileo Press, Bonn 2010.
ISBN: 978-3-8362-1346-2
39,90 Euro

Dann zum Stand meiner Dinge:
Die Datei pg_hba.conf hat nun (fast) am Ende die beiden Zeilen:
local all all trust
host all all 127.0.0.1/32 trust
Der Fehler ist aber unverändert: “Ident-Authentifizierung für Benutzer >>psbuch<< fehlgeschlagen …”

Soll ich PostgreSQL neu installieren?
Dagegen spricht: Bei der Installation gab es keine Fehlermeldungen.
Dafür spricht: Sehr aufwendig ist es unter Ubuntu nicht, und ich habe ja noch nicht viel Zeit in die Einarbeitung verwendet (mehr in die Fehlersuche :wink:

Gruß von
Sandbank

Nein. Wenn Deine TRUST-Einträge (fast) am Ende der pg_hba.conf stehen, vermute ich mal, vorher stehen die IDENT-Einträge. Und PostgreSQL liest so wie Du und ich: von oben nach unten. Alles klar?

Andreas

Die Antwort habe ich leider nicht verstanden.
“Nein.” interpretiere ich als Antwort auf die Frage, ob ich PostgreSQL neu installieren soll.

Welche Bedeutung die Reihenfolge der Einträge haben soll, ist mir auch nicht klar.
Spaßeshalber habe ich mal die Zeile “local all postgres ident” auskommentiert.
Der Fehler war immer noch da.

("(fast) am Ende" habe ich geschrieben, weil es GANZ am Ende ja noch die Zeile zu IPv6 gibt.)

Hier ist jetzt der aktuelle Stand der Datei pg_hba.conf (alle Zeilen darüber sind ja Kommentarzeilen):

— schnipp

Database administrative login by UNIX sockets

local all postgres ident

TYPE DATABASE USER CIDR-ADDRESS METHOD

“local” is for Unix domain socket connections only

local all all trust

IPv4 local connections:

host all all 127.0.0.1/32 trust

IPv6 local connections:

host all all ::1/128 md5
— schnapp

… und durch Zufall habe ich Folgendes entdeckt: Nach einem Neustart des Rechners kann ich mich als psbuch verbinden.
Offensichtlich reicht es nicht, psql zu beenden und wieder aufzurufen. Ein Rechnerstart reicht, ist aber hoffentlich nicht notwendig.
Vielleicht reicht es auch, wenn der Benutzer postgres sich ausloggt und wieder einloggt. Ist das so?
Gibt es eine andere Möglichkeit, die Änderungen in pg_hba.conf dem System bekannt zu machen?

Hoffentlich ist mir jetzt keiner böse: Ich habe ja gesagt, dass ich ein Anfänger bin, und das Buch weist auch nicht darauf hin. Im Gegenteil: Siehe meinen ersten Beitrag zu diesem Thema - Benutzer anlegen, Datenbank anlegen und Verbindung aufnehmen folgen unmittelbar aufeinander. Da war ich schon stolz auf mich, dass ich psql beendet habe…

Dank und Gruß von
Sandbank

Rechnerstart ist vollkommen unnötig. Der Grund warum es danach ging ist, dass Postgres neu gestartet wurde, und damit die pg_hba.conf neu eingelesen wurde.
Dafür ist aber kein Neustart vom System oder von Postgres notwendig. Mit pg_ctl reload kannst Du die Konfigurationsdateien neu einlesen ohne Postgres oder den Rechner neu starten zu müssen. Genaueres dazu steht im Handbuch.

Du schreibst nicht mit welchem Betriebssystem Du arbeitest. Beim Windows Installer wird ein Menüpunkt “Reload Configuration” erstellt, der genau den oben erwähnten Befehl ausführt.

Vielen Dank für den Hinweis auf pg_ctl!
Als Anfänger hat es mich Zeit gekostet, die nötigen Parameter zu finden. Bei mir funktioniert es mit

postgres…$ /usr/lib/postgresql/8.4/bin/pg_ctl reload -D /var/lib/postgresql/8.4/main
An alle noch mal vielen Dank! Ich werde jetzt an die Autoren meines “Praxisbuches” schreiben, wie sie die Sache sehen :wink:

Gruß von
Sandbank

P.S.: Mein Betriebssystem habe ich in meinem ersten Beitrag (meiner ersten Frage) genannt: Ubuntu 10.04

Jups, schreib den beiden Mal. Die sind für Kommentare offen.

Im übrigen: wenn du die pg_hba.conf schon offen hast: da stehen mehrere Seiten Dokumentation und Beispiele am Anfang.

Oops. Sorry, ist irgendwie an mir vorbeigegangen - und ich hab’ wirklich vorher geschaut! :rolleyes:

Thomas Pfeiffer und Andreas Wenk habe ich eine Mail mit meinen Fragen geschickt - und bin auf ihre Antwort gespannt! (Das Buch finde ich nach wie vor sehr gut.)

Die Kommentare in der pg_hba.conf habe ich gesehen. Die haben mich erst mal abgeschreckt, und als Anfänger spiele ich ungern in Konfigurationsdateien herum. Jetzt aber werde ich sie mir mal genauer anschauen.

An castorp: Mit dem, was ich schon übersehen habe, könnte ich Bücher schreiben. Ich bin niemandem böse, wenn er etwas übersieht und fragt!

Gruß von
Sandbank

na na na …

Gruß

Andy

Ach da iss er ja.
Andy: Dann kannst du ja persönlich Stellung nehmen :wink:

/me duckt sich…

Andreas

ha ha - recht so …

Nee Spass bei Seite. Ich hab Guido schon eine E-Mail geschrieben. Ob das im Buch tatsächlich didaktisch nicht so toll steht werde ich checken und dass dann hier posten. As soon as possible (momentan @work)

Grüße an Euch alle

Andy