¿Cómo puedo configurar la contraseña de un usuario de MySQL usando una contraseña previamente codificada?
Tengo un servidor de base de datos MySQL 5.1.73.
Según la documentación de MySQL, en las versiones más nuevas de MySQL, crear un usuario usando una contraseña previamente codificada como esta:
CREATE USER 'ans'@'localhost'
IDENTIFIED BY PASSWORD 'hash_string'
Está en desuso y se eliminará en una versión futura de MySQL.
Sin embargo, no puedo entender cuál (si es que hay alguna) es la nueva forma de lograr esto.
UsamosZapateropara configurar nuestras bases de datos, y me gustaría completar previamente mis bases de datos con las cuentas que necesitarán, junto con las contraseñas que usarán, sin tener las contraseñas de texto sin cifrar en mis scripts. Pensé que dopar esto funcionaría:
update mysql.user
set password = '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB'
where user = 'ans';
Pero en mis pruebas, eso en realidad no cambia la contraseña de inicio de sesión de MySQL.
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.
Respuesta1
Cuando pirateas la contraseña mysql.user
, se supone que debes ejecutar
mysql> FLUSH PRIVILEGES;
De acuerdo con laDocumentación de MySQL sobre FLUSH
PRIVILEGIOS
Recarga los privilegios de las tablas de concesión en la base de datos mysql.
El servidor almacena en caché información en la memoria como resultado de las declaraciones GRANT, CREATE USER, CREATE SERVER e INSTALL PLUGIN. Esta memoria no es liberada por las declaraciones REVOKE, DROP USER, DROP SERVER y UNINSTALL PLUGIN correspondientes, por lo que para un servidor que ejecuta muchas instancias de las declaraciones que causan el almacenamiento en caché, habrá un aumento en el uso de memoria. Esta memoria caché se puede liberar con FLUSH PRIVILEGES.
Ahora, debes reiniciar MySQL para que la contraseña surta efecto.
Respuesta2
Un poco antiguo ahora, pero para referencia futura, al usar el SHOW CREATE USER 'ans'@'localhost'
comando puede ver que la nueva sintaxis tiene la forma:
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