Actualizando contraseñas en MySQL

Desde hace unas cuantas versiones de MySQL la generación de contraseñas seguras ha aumentado, pero actualizarlas es un proceso bastante tedioso porque tiene que ser usuario por usuario en nuestra base de datos.

Para compatibilizar con contraseñas antiguas existen dos instrucciones en el archivo my.cnf que nos permiten utilizar contraseñas menos seguras en sistemas más modernos y de esta forma no tener que actualizar uno a uno todos los usuarios, estas instrucciones son:

secure_auth=1
old_passwords=1

Si queremos que MySQL se conecte utilizando contraseñas antiguas debemos tener la primera comentada y la segunda no. ¿Qué hacen estas instrucciones?

secure_auth le dice al servidor de MySQL que solo permita conexiones seguras y old_passwords activado lo que le dice a MySQL que cada vez que se ejecute la función PASSWORD nos devuelva una contraseña en formato antiguo.

Actualizando contraseñas en MySQL

Si decidimos actualizar lo podemos hacer remotamente, no hay necesidad de conectarnos directamente a nuestro servidor, en mi caso lo hice con SQLYog.

Lo primero es editar my.cnf y comentar la línea old_passwords=1 (la otra es necesario dejarla coemntada por ahora sino no podremos acceder a nuestro servidor), reiniciamos el servidor y por cada usuario que tengamos tenemos que ejecutar la siguiente consulta:

UPDATE USER SET PASSWORD = PASSWORD(‘mi clave’) WHERE USER = ‘mi usuario’;

Una vez terminados y actualizados los usuarios ejecutamos:

FLUSH PRIVILEGES;

De esta formas si hacemos un select de la tabla user de la base de datos mysql todas las claves deberían tener este formato (*88A4B9D0AE1DF8AA29720D20BFD966D05628FC90) en vez de este (132afc1d654c78c2).

Todos los usuarios que no cambiemos y luego queramos acceder con ellos nos van a dar el siguiente error:

Error: 1275 Server is running in --secure-auth mode, but '%s'@'% s' has a password in the old format; please change...

Así como de todos los que no nos acordemos de la clave y la actualicemos mal tendremos lo siguiente:

Access denied for user '%s'@'% s' (using password: YES)

Ahora vamos al archivo my.cnf y des comentamos la línea secure_auth=1, reiniciamos el servidor y ya tenemos actualizadas todas nuestras contraseñas.

Comentarios