PASSWORD-Wert mit MySQL-Abfragen erzeugen

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

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

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, sodass 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, sodass 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 bekommt 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.