Cambiar el método de autenticación en MySQL
De seguro si programas en PHP u otros lenguajes que utilicen las últimas versiones de MySQL has visto alguna vez este el siguiente error al momento de realizar la autenticación:
The server requested authentication method unknown to the client [caching_sha2_password]
Esto se debe a que en las últimas versiones de MySQL el método de autenticación por defecto es caching_sha2_password en contraposición al clásico mysql_native_password. Algunos lenguajes como PHP aún no soportan este nuevo método de autenticación, por lo cuál los usuarios que se usen para realizar operaciones en mysql desde estos lenguajes deben tener el método clásico de autenticación. A continuación veremos cómo cambiar el método de autenticación para uno o todos los usuario de la base de datos.
Identificación del método o plugin de autenticación
Para identificar que usuarios están registrados en la base de datos y que plugin de autenticación utiliza cada uno deberás ingresar con root y ejecutar el siguiente comando:
select User, plugin from mysql.user;
Deberás obtener un resultado similar al siguiente:
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| some_user | caching_sha2_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
| root | caching_sha2_password |
+------------------+-----------------------+
Como puedes ver, todos los usuarios tiene el plugin nuevo de autenticación.
Cambiar el plugin para todos los usuarios
Antes que nada, el siguiente procedimiento funciona únicamente para los nuevos usuarios, los usuarios ya registrados seguirán conservando el método de autenticación con el que fueron creados. Lo primero que debes hacer es localizar el archivo my.cnf y abrirlo con tu editor de texto preferido, en mi caso, vim.
Distribuciones linux basadas en GNU\Linux Debian:
sudo vim /etc/mysql/my.cnf
MacOS con homebrew:
sudo vim /usr/local/etc/my.cnf
Enseguida debes agregar la siguiente línea al final de archivo:
default_authentication_plugin=mysql_native_password
Lo siguiente sería reiniciar el servidor de mysql, aunque no estoy seguro si es realmente necesario.
Cambiar el plugin para un solo usuario
Para cambiar el plugin de un solo usuario debes entrar con el usuario root y ejecutar el siguiente comando en donde deberás reemplazar some_user por el usuario que deseas cambiar y mypass por el nuevo password.
Para MySQL < 8.0.11
UPDATE mysql.user SET authentication_string = PASSWORD('mypass') WHERE user = 'some_user';
Para MySQL >= 8.0.11
ALTER USER 'declarations_usr'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret_usr';
Si lo que deseas es dejar el password en blanco para que el usuario ingrese y lo cambie, deberás dejar el campo authentication_string en NULL
.
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'some_user', authentication_string=NULL;
Enseguida debes recargar los privilegios con
FLUSH PRIVILEGES;
Si ejecutaste el script para dejar el password en blanco deberás ingresar con el usuario en cuestión y configurar el nuevo password con el siguiente comando:
SET PASSWORD = 'mypass';
Crear un usuario con plugin definido
Si ya deseas crear un usuario con un plugin diferente al que está configurado por defecto, debes agregar la cláusula WITH para indicar explícitamente el plugin.
CREATE USER 'declarations_usr'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret_usr';
Eso es todo, hasta la próxima!.