OLD_PASSWORD und PASSWORD-Wert mit MySQL-Abfragen erzeugen

27 Nov 2010 um 01:02 - MySQL/Datenbank

Haben Sie schon irgendwann von einem Hostinganbieter zu anderem umgestiegen? Hier sollte man nicht nur PHP-Features berücksichtigen, sondern auch MySQL-Features kennen.

Problembeschreibung: es gab eine Tabelle mit den Zugangsdaten, in der die Passwörter mit MySQL PASSWORD gespeichert wurden. Bei dem neuen Anbieter war diese Funktion umgeschaltet auf OLD_PASSWORD, so dass PASSWORD gleich OLD_PASSWORD ist.

Hier kläre ich, um was es eigentlich geht. OLD_PASSWORD-Funktion erzeugt einen Hashwert (alten Wert von Funktion PASSWORD) des alten Modells (vor Version 4.1), dient zur Abwärtskompatibilität. Ab Version 4.1 wurde die Funktion PASSWORD geändert. Alle MySQL-Benutzerkonten (root usw.) sind in der Tabelle user der Datenbank mysql aufgelistet. Die Passwörter in der Spalte "Passwort" werden mit der PASSWORD-Funktion berechnet.

Sehr viele Webseiten und Hostinganbieter haben die Tabellen mit den alten Werten von PASSWORD-Funktion (16 Zeichen). Deshalb setzen Sie die Variable "old_password" in my.ini auf 1 gesetzt, so dass neue Funktion PASSWORD das alte Verfahren verwendet.

Vor Version 4.1: PASSWORD('1234') ='446a12100c856ce9' (16 Zeichen)
Nach Version 4.1: OLD_PASSWORD('1234')='446a12100c856ce9' (16 Zeichen)
Nach Version 4.1: PASSWORD('1234')='*A4B6157319038724E3560894F7F932C8886EBFCF' (41 Zeichen)

Wenn die Variable "old_password" aus my.ini auf 1 gesetzt wurde, dann:

Nach Version 4.1: OLD_PASSWORD('1234')='446a12100c856ce9'
Nach Version 4.1: PASSWORD('1234')='446a12100c856ce9'

Aber ich hatte die Passwörter mit 41 Zeichen und die Einstellung aus my.ini (oder my.cnf) dürfen wir nicht ändern. Deshalb habe ich selbst eine SQL-Abfrage geschrieben, die neue 41-lange PASSWORD-Funktion emuliert:

SELECT CONCAT('*',UCASE(CAST(SHA1(UNHEX(SHA1('1234'))) AS CHAR)))

und als Antwort bekommnt man den gewünschten Wert '*A4B6157319038724E3560894F7F932C8886EBFCF'

Leider beinhaltet die MySQL-Dokumentation keine Hinweise darauf, dass die neue PASSWORD-Funktion mit dieser Formel generiert werden kann.

Beachten Sie, dass PASSWORD sowie OLD_PASSWORD quasi interne Funktionen sind. Sie dienen zur Kodierung interner Passwörter (Tabelle "user" usw.) Wenn Sie die Zugangsdaten Ihrer Benutzer speichern möchten, verwenden Sie Funktionen SHA1 oder MD5.

Kommentare

Bisland keine Kommentare - sei der erste!


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.0071811676025391 sec