Wie kann ich das Passwort eines MySQL-Benutzers mithilfe eines vorgehashten Passworts festlegen?

Wie kann ich das Passwort eines MySQL-Benutzers mithilfe eines vorgehashten Passworts festlegen?

Wie kann ich das Passwort eines MySQL-Benutzers mithilfe eines vorgehashten Passworts festlegen?


Ich habe einen MySQL 5.1.73-Datenbankserver.

Laut der MySQL-Dokumentation funktioniert das Erstellen eines Benutzers in den neueren MySQL-Versionen mit einem vorgehashten Passwort wie folgt:

CREATE USER 'ans'@'localhost'
    IDENTIFIED BY PASSWORD 'hash_string'

Ist veraltet und wird in einer zukünftigen MySQL-Version entfernt.

Ich kann jedoch nicht herausfinden, wie dies (wenn überhaupt) auf neue Weise erreicht werden kann.

Wir gebrauchenSchusterum unsere Datenbanken einzurichten, und ich möchte meine Datenbanken mit den benötigten Konten und den zu verwendenden Passwörtern vorab füllen, ohne die Passwörter im Klartext in meinen Skripten zu haben. Ich hätte gedacht, dass dies funktioniert:

update mysql.user
    set password = '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB'
    where user = 'ans';

Aber meinen Tests zufolge ändert das nicht wirklich das MySQL-Anmeldekennwort.

mysql> create user 'ans'@'localhost' identified by 'foo';
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| ans  | localhost | *F3A2A51A9B0F2BE2468926B4132313728C250DBF |
+------+-----------+-------------------------------------------+
mysql> update mysql.user set password = password('bar') where user = 'ans';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| ans  | localhost | *E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB |
+------+-----------+-------------------------------------------+
mysql> quit
$ mysql -uans -pbar
ERROR 1045 (28000): Access denied for user 'ans'@'localhost' (using password: YES)
$ mysql -uans -pfoo
Welcome to the MySQL monitor.  Commands end with ; or \g.

Antwort1

Wenn Sie das Passwort in hacken mysql.user, sollten Sie ausführen

mysql> FLUSH PRIVILEGES;

Entsprechend derMySQL-Dokumentation zu FLUSH

PRIVILEGIEN

Lädt die Berechtigungen aus den Berechtigungstabellen in der MySQL-Datenbank neu.

Der Server speichert Informationen im Speicher als Ergebnis der Anweisungen GRANT, CREATE USER, CREATE SERVER und INSTALL PLUGIN zwischen. Dieser Speicher wird nicht durch die entsprechenden Anweisungen REVOKE, DROP USER, DROP SERVER und UNINSTALL PLUGIN freigegeben. Daher wird bei einem Server, der viele Instanzen der Anweisungen ausführt, die eine Zwischenspeicherung verursachen, der Speicherverbrauch erhöht. Dieser zwischengespeicherte Speicher kann mit FLUSH PRIVILEGES freigegeben werden.

Jetzt müssen Sie MySQL neu starten, damit das Passwort wirksam wird.

Antwort2

Mittlerweile etwas veraltet, aber zur künftigen Bezugnahme SHOW CREATE USER 'ans'@'localhost'können Sie anhand des Befehls erkennen, dass die neue Syntax folgende Form hat:

CREATE USER 'ans'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT

verwandte Informationen