sundrew
Goto Top

MySQL Password Funktion - Hash-Werte verlängern

Hallo liebe Community!

Ich habe einen Dump einer DB von einem MySQL Server 4.0 auf einem MySQL Server 5.1 einspielen müssen.

In besagter Datenbank wurde eine Spalte "User_Pwd" mit der MySQL PASSWORD() Funktion befüllt, sprich es stehen lauter Hashwerte in dieser Spalte.

Nun gibt es zu dieser DB auch eine Webanwendung, die sehr oft Abfragen ausführt alà "SELECT * FROM ... WHERE ... AND User_Pwd = PASSWORD('meinpasswort')" - das funktioniert ja leider nicht, denn die PASSWORD() Funktion in MySQL 5.1 liefert 41 Byte lange Hashwerte - und in der Tabelle stehen nur 16 Byte lange Werte. Der Vergleich schlägt also fehl.

Wie kann ich nun einen Vergleich durchführen OHNE die Hashwerte in der Spalte anrühren zu müssen?!

Vielen Dank für jeden Tipp!

Content-Key: 139912

Url: https://administrator.de/contentid/139912

Printed on: April 20, 2024 at 00:04 o'clock

Member: matze2010
matze2010 Apr 06, 2010 at 09:25:32 (UTC)
Goto Top
Hallo sundrew,

lies dir mal folgendes durch:
http://dev.mysql.com/doc/refman/5.1/de/password-hashing.html

insbesondere den Teil
"Die Spalte Password muss breit genug sein, um lange Hashes (41 Bytes) aufzunehmen. Wenn die Spalte nicht aktualisiert wurde und noch die Breite von 16 Bytes hat, stellt der Server fest, dass lange Hashes nicht in die Spalte passen. Insofern werden nur kurze Hashes erzeugt, wenn ein Client passwortändernde Operationen mit PASSWORD(), GRANT oder SET PASSWORD durchführt. Dieses Verhalten tritt auf, wenn Sie auf Version 4.1 aktualisiert, aber das Skript mysql_fix_privilege_tables zur Verbreiterung der Spalte Password noch nicht ausgeführt haben. "

evtl. hilft dir das weiter, wenn du die Spalte der Passwort auf 16 begrenzt.

Lg
Matze
Member: sundrew
sundrew Apr 06, 2010 at 09:52:49 (UTC)
Goto Top
Hi Matze,

danke für deine Antwort.

Die Seite habe ich schon relativ ausführlich gelesen. Meine Spaltenlänge ist >16 Bytes, das ist ein ganz normales varchar-Feld mit Länge 50.

Ich habe es schon mit der auf der Seite beschriebenen OLD_PASSWORD('meinPasswort') Variante versucht - das wird zwar ausgeführt und es steht anschließend ein kurzer Hashwert in der Tabelle, jedoch klappt der Vergleich im Skript nach wie vor nicht... face-sad (Also die Abfrage WHERE User_Pwd = PASSWORD('meinpasswort'))
Member: sundrew
sundrew Apr 06, 2010 at 09:59:32 (UTC)
Goto Top
Jetzt antworte ich mir mal selber - es liegt im Detail begraben face-wink :
Abfrage im Skript muss nun natürlich "...WHERE User_Pwd = OLD_PASSWORD('meinpasswort')" lauten.

Dann müsste ich das nur im Skript überall ändern (lassen) und nach jeder Useranlage oder Passwort-Änderung ein OLD_PASSWORT durchführen.