User Passwort anzeigen lassen und ändern

Hallo zusammen

Ich habe ein Java-Programm mit dem ich DB-Nutzer anlegen und löschen
kann. Dazu möchte ich das der Nutzer seinen Account selber löschen
kann aber nur mit seinem gültigen Passwort.

Also ich will das Passwort für den DB-Nutzer auslesen und vergleichen.
Wenn es stimmt dann wird der Nutzer gelöscht.

Nun ist die Frage wie kann ich das Passwort auslesen.Das Passwort ist
ja auch encryptet…müsste ich dann auch nur die Hash’es vergleichen
richtig? Da würde sich die Frage stellen wo ich bzw. wie ich
feststellen kann was postgres für ein Algorithmus zu verschlüsseln
nimmt.

Danke für eure Hilfe!

MfG
olden

Nachtrag:

Das die Passwörter in /var/lib/postgresql/data/global/pg_pwd stehen ist mir
schon klar, aber mit dem Programm habe ich nicht die Rechte auf diese
Datei zuzugreifen (will ich auch garnicht).

Ich möchte halt per DB Befehl mit die Hashes anzeigen lassen als
Superuser. Der Superuser sollte sowas eigentlich dürfen…

die Verschlüsslung ist nebenbei gesagt md5, wer lesen kann ist klar im
Vorteil :astonished: ops:

Hallo olden,

Hast Du dir das auch genau überlegt? Zum löschen einer Datenbank werden die Rechte eines DB-Admins benötigt.


Eine Möglichkeit für das Suchen eine Passwortes sind die Systemtabellen der Datenbank. Aber dazu werden auch Rechte eines DB-Admins benötigt. Es ist auch nicht alles in der Doku dokumentiert. Man muss daher schon selber mal die Systemtabellen durchforsten.

Zudem ist es notwendig alle vom User erstellten Tabellen, Funktionen, … vorab zu löschen. Probleme treten dann mit Sicherheit auf, wenn andere User auch noch mit den Tabellen, Funktionen, … arbeiten.

PS: Der Background der Applikation wurde leider nicht beschrieben.



mfg

fristo

hallo fristo

ja ich hab mir das gut überlegt. Denn:

Ich habe pro User 1 Tabelle die angelegt wird wenn sich ein neuer
Nutzer anmeldet. Da fummelt niemand anderes drinrum.

Dann über das JavaGUI soll der nutzer halt seinen Account selber löschen.
Erst löscht er seine Tabelle und dann sich selbst. Das geschiet mit Adminrecht. Das ist schon ok weil der Nutzer nur den Account
löschen kann dessen Passwort er auch hat.

Und genau aus diesem Grund will ich an das Passwort. Ich muss natürlich
bei der Anfrage zum Accountlöschen überprüfen ob nutzername und passwort
zueinander passen.

ein SELECT passwd from pg_user; bringt mir allerdings nur *******
und kein md5 hash.

Wie zu T****l komm ich denn an diesen doofen Hash?

Zur Applikation

Postgresql DB
|
Webservice (Java) für die Datenbank
----------------------------------------------serverseite
|
Internet
|
----------------------------------------------clientseite
Client (Java) für den Nutzer
und von diesem Client aus gibts einen button “Account löschen”

MfG
olden

Hallo olden,

wenn der Nutzer auf dem Client den Button “Account löschen” betätigt ist der doch angemeldet, oder? Damit brauchst Du doch kein Passwort vom User. Und der DB-Admin braucht grundsätzlich kein Passwort um einen User zu löschen. Zudem würde ich aus Gründen der Sicherheit die Aktionen des DB-Admin auf dem Server verlegen.



mfg

fristo

hallo fristo

wenn der Nutzer auf dem Client den Button “Account löschen” betätigt ist der doch angemeldet, oder?

Nein isser nicht. Weil er überträgt vom Client eigentlich nur seine
Wunschaktion (z.B. Eintrag löschen oder account löschen), seinen Loginnamen
und sein Passwort (xml-encrypted selbstverständlich)
Und der Server (Webservice) führt dann die eigentliche Aktion aus.

Ich habe jetzt folgende quick-and-dirty Lösung genommen:

Wenn der Nutzer seinen Account löschen will, musser ja erst seine
eigene Tabelle löschen. Dafür muss sein Passwort stimmen. Löst diese
Aktion keine Exception aus (würde sie ja tun wenn das Passwort falsch
wäre) dann und nur dann connected sich der Admin und löscht dessen
Account

try
{
cn = DriverManager.getConnection( "jdbc:postgresql:MEINEDB", user, pass );
st = cn.createStatement();
String drop = "DROP TABLE blast_"+user+";";
st.executeUpdate(drop);
st.close();
cn.close();
}
catch (Exception e)
{
setFaultMessage("Error: "+e.getMessage());
return false;
}
			
try{	
cn = DriverManager.getConnection( "jdbc:postgresql:MEINEDB", "Admin", "geheim" );
st = cn.createStatement();
drop = "DROP USER "+user+";";
st.executeUpdate(drop);
st.close();
cn.close();
}
catch (Exception e)
{
setFaultMessage("Error: "+e.getMessage());
return false;
}

MfG
olden

Hallo olden,

damit bist Du auf dem richtigen Weg.



mfg

fristo