Passwort erfragen

Hallo,

ich möchte einem angemeldeten DB-User die Möglichkeit geben, sein Passwort zu ändern. Dabei soll das alte Passwort abgefragt und verglichen werden.

Wie kann man im postgres das Passwort des aktuellen Users abfragen, ohne Superuser zu sein ?

Gibt es eine Lösung für mein Problem ?

Jens

PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: ALTER ROLE

ein superuser darf sofern er CREATEROLE permissions besitzt natuerlich andere (Login-)Rollen, also User, erzeugen und Änderungen durchführen - so auch das Pwd.

Ein “normaler” User kann sein eigenes Passwort natürlich ändern. Mit dem gleichen Kommando ALTER ROLE ich_selbst SET PASSWORD = …

Zu beachten ist, dass das Pwd der Form entsprechen muss wie es PG erwartet - also crypt, md5 oder weiss der Teufel noch.

Abfragen macht spätestens dann, wenn das Pwd gecrypted ist garkeinen Sinn mehr. Sollte auch nicht möglich sein - ich hoffe mal, dass das auch so ist :slight_smile:

Vielen Dank für die Hilfe,

aber das löst noch nicht mein Problem, dass ich für den angemeldeten User sein Passwort aus der DB erfragen möchte.

Jens

Du kannst Dir eine function schreiben und diese als db-admin installieren mit security definer, welche das Feld passwd aus pg_shadow für den current_user ausliest. Hab ich jetzt aber nicht getestet, weil dies insofern sinnfrei ist, weil dort das Passwort zwar steht, aber halt verschlüsselt.
Eines der hier verwendeten Passwörter ist z.B. “md528fd038dce151a6a302b997e8c0b7dc4”.


Hilft Dir das nun weiter?

Andreas, an sich zweifelnd…

und aus diesem MD5 laesst sich auch das Passwort nicht rekonstruieren … das ist ja gerade der Witz an der Geschichte.

Naja … er könnte dann höchstens selbst via MD5(passwordtext + loginname) den md5-hash erzeugen und diesen ausgelesenen vergleichen, wenn es darum geht das alte pwd zu bestaetigen …

Ich werde die Funktion mal ausprobieren.

Ich denke aber, dass ich als angemeldeter Nicht-Superuser die Sicht pg_shadow nicht abfragen darf.
Ich habe versucht als normaler User die Sicht pg_shadow abzufragen, was zu einem Berechtigungsproblem führte.

Muss eigentlich bei der Berechnung des MD5-Wertes der loginname mit reingenommen werden ?

Jens

Deswegen schrieb ich auch security definer.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CREATE FUNCTION

Andreas

ak schrieb

Du kannst Dir eine function schreiben und diese als db-admin installieren mit SECURITY DEFINER …,

wenn ich das richtig interpretiere, wird die funktion dann mit jenen rechten ausgefuehrt, die der DEFINER hatte, als er sie erzeugte - die funktion. D.g. du musst die funktion mit einem user erzeugen, der die ersehnte tabelle / view anfassen darf

gruss

Großen Dank für den Hinweis mit security definer.
Das ist ein Feature, welches mir noch völlig unbekannt war.
Ich habe es schon ausprobiert und es funktioniert.

Jens

Wie groß ist das Sicherheitsproblem, wenn eine Funktion mit security definer erstellt wird ?

Jens

Wenn Du wie in Deinem Beispiel die funktion so schreiben würdest, daß Du als Parameter einen String mit dem Usernamen gibst, dann kann jeder Dödel da einen beliebigen Namen übergeben. Daher schrieb ich auch was von ‘current_user’, und das übergibst Du nicht als Parameter, sondern verwendest das so in der Funktion. Als Beispiel. Natürlich muß man aufpassen, was man in solchen Funktionen macht.

Andreas

Ich habe eine Funktion geschrieben, die so funktioniert, wie ich das will.
Man muss nur immer auf session_user statt current_user zugreifen, sonst wird auf das Passwort des Funktionsdefinierers zugegriffen.

Also nochmal vielen Dank

Jens

Ja, mein Fehler, sorry.

Andreas

So groß, wie du das Sicherheitsproblem werden lässt …

Also, Eingaben prüfen, alle Fehler und Möglichkeiten abfangen, am besten den Funktionsablauf erst theoretisch planen und anhanddessen umsetzen.

Wenn du dich an normale Regeln für Programmierung hälst, ist das kein Problem.