Nach Vergabe e. verschlüsselten Passwortes ist Einloggen in die Rolle nicht möglich

Windows 7
PostgreSQL 9.1 mit PostGIS 2.0
PostgreSQL-Anfänger


Liebe PostgreSQL-Gemeinde!

In meiner Datenbank habe ich drei Rollen vergeben, zwei Login-Rollen (Superuser) und eine Gruppen-Rolle, welche sich nicht einloggen kann, da das Passwort standardmäßig auf NULL gesetzt wurde, weil bei der Erstellung der Gruppen-Rolle kein Passwort angegeben wurde.

Nun habe ich versucht (als Login-Rolle/Superuser angemeldet) in der psql-Konsole mit folgendem Befehl ein verschlüsseltes Passwort der Gruppen-Rolle zuzuordnen. Der Hashwert wurde mit dem Programm md5 erzeugt:

ALTER ROLE rollenname WITH ENCRYPTED PASSWORD ‘xxxxxxxxxxxxxx’;

Der Hashwert ‘xxxxxxxxxxxxxx’ (lautet in Wirklichkeit anders und ist 32-stellig) muss dabei in einfachen Anführungszeichen stehen.

Ich erhalte nach Ausführung des Befehls keine Fehlermeldung. Die psql-Konsole gibt die Rückmeldung ALTER ROLE.

Wenn ich im pgAdminIII die Gruppenrolle auffrische, erscheint unter Eigenschaften (Kann einloggen? -> Nein) keine Änderungen.

Nach dem Verlassen der psql-Konsole und dem Erneuten Einloggen, diesmal über die Gruppenrolle, für die das verschlüsselte Passwort erstellt wurde, wird die Eingabe des Passwortes (Ich gebe natürlich das Passwort ein, welches den Hashwert erzeugte, nicht den Hashwert selbst.) mit folgender Fehlermeldung quittiert:

psql. FATAL: Passwort-Authentifizierung für Benutzer >>yyyy<< fehlgeschlagen

Weiß jemand, ob ich etwas falsch gemacht habe? Und wenn ja, was?

Vielen Dank für Eure/Ihre Hilfe!

Liebe Grüße
vegochilde

PS: Löschen der Gruppen-Rolle und Vergabe einer neuen Rolle mit verschlüsseltem Passwort, löst das Problem nicht wirklich elegant.


PPS: Die Vergabe einen verschlüsselten Passwortes für eine Login-Rolle hat funktioniert.


PPPS: Habe im pgAdminIII unter ‘Server’ zwei PostgreSQL-Einträge (8.3 + 9.3). In 8.3 kann ich mich nicht einloggen. Habe alte Installationen nach Anleitungen im Netz entfernt (unter dem Stichwort ‘restlos’). Dies füge ich an, weil es vielleicht für meine Fragestellung doch von belang sein könnte.

Hast du die Rolle auf “LOGIN” gesetzt?

Zunächst Danke für Deine Antwort, ads!

Zuerst hatte ich dies tatsächlich vergessen, dann aber geändert. Die Rolle hat im pgAdmin III aktuell den Status “Kann einloggen? Ja”. Ein Einloggen über die psql-Konsole mit dem verschlüsselten Passwort funktioniert jedoch nach wie vor nicht.


Den Befehl für die Vergabe des verschlüsselten Passwortes hatte ich nach der Änderung der Gruppenrolle in eine Login-Rolle erneut ohne Fehlermeldung ausgeführt (ALTER ROLE xy WITH ENCRYPTED PASSWORD; )

LG
vegochilde

Funktioniert es denn wenn Du das Passwort (zu Testzwecken) mal im Klartext angibst?

Ja, das funktioniert (ALTER ROLE rollenname WITH PASSWORD ‘klartext’; ).

Dann würde ich mal darauf tippen, dass Dein Hashwert falsch ist.

Problem gelöst!

Danke auch Dir castorp, für Deine Antworten!

Dein Riecher war richtig, obwohl das Wort ‘falsch’ in Bezug auf den Hashwert relativiert werden muss.

Erzeuge ich mit dem Programm ‘md5’ (geöffnet über die Konsole des Betriebssystems → cmd.exe) durch die Eingabe einer Zeichenkette (mein verschlüsseltes Passwort) einen Hashwert, wird dieser in einer Kombination von Großbuchstaben und Ziffern ausgegeben.
Diese Zeichenkette wird in der Konsole des Betriebssystems angezeigt und kann markiert und kopiert werden.

Mit eben diesem kopierten Hashwert scheiterte der Versuch einer Login-Rolle (Superuser), ein verschlüsseltes Passwort zu geben:

ALTER ROLE rollenname WITH ENCRYPTED PASSWORD ‘hashwert’;

Es erschien die Fehlermeldung:

“psql: FATAL Passwort-Authentifizierung für Benutzer >>rollenname<< fehlgeschlagen”

Gehe ich nun im pgAdmin III in die Eigenschaften der Login-Rolle (Superuser) und gebe im Reiter ‘Definition’ das selbe Passwort ein wie im MD5-Programm, erzeugt dies im Reiter ‘SQL’ einen anderen Hashwert als beim MD5-Programm, bei dem zusätzlich ‘md5’ am Anfang des Wertes steht. Mit diesem anderen, durch pgAdmin III erzeugten Hashwert funktioniert die Vergabe eines verschlüsselten Passwortes in der psql-Konsole (ALTER ROLE rollenname WITH ENCRYPTED PASSWORD ‘hashwert’; ).

Da MD5 bereits geknackt wurde (heise online | Zertifizierungsstellen reagieren auf MD5-Hack), vermute ich beim pdAdmin III einen Saltwert (Salt (Kryptologie)).

Erwähnenswert finde ich, dass man mit dem Befehl in der psql-Konsole

SELECT MD5(‘gewuenschtes_Passwort’);

den selben Hashwert erzeugt, wie das oben erwähnte MD5-Programm. Mit dem intern über die psql-Konsole erzeugten Hashwert kann ich also in PostgreSQL kein verschlüsseltes Passwort erzeugen, nur über den pgAdmin III. Für einen Anfänger von PostgreSQL sind die unterschiedlichen Hashwerte verwirrend. Könnte man dies in der Fehlermeldung berücksichtigen?

Abschließend möchte ich noch erwähnen, dass ich mich eine ganze Zeit lang auf einer falschen Fährte befand, weil ich beim Anzeigen der Zugriffswerte der besagten Login-Rolle (Superuser) mittels \dp keine CONNECT (‘c’)-Zugriffsrechte zur Datenbank angezeigt bekam und deshalb vermutete, die Login-Rolle müsse erst mit der Datenbank verbunden werden. Warum erscheinen die ‘c’-Rechte nicht in der psql-Anzeige, obwohl die Login-Rolle Superuser ist? Ich werde zu dieser Frage womöglich einen eigenen Thread eröffnen.

LG
vegochilde

Lesen bildet :wink:

PostgreSQL: Documentation: 9.1: ALTER ROLE

“[LEFT]Because[/LEFT]MD5[LEFT]-encrypted passwords use the role name as cryptographic salt”[/LEFT]