Saltar al contenido

MySQL 8.0: el cliente no admite el protocolo de autenticación solicitado por el servidor; considere actualizar el cliente MySQL

Solución:

Ejecute la siguiente consulta en MYSQL Workbench

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

Dónde root como tu usuario
localhost como su URL y password como tu contraseña

Luego ejecute esta consulta para actualizar los privilegios:

flush privileges;

Intente conectarse usando el nodo después de hacerlo.

Si eso no funciona, inténtelo sin @'localhost' parte.

Primero aclaremos lo que está pasando.

MySQL 8 admite métodos de autenticación conectables. Por defecto, uno de ellos llamado caching_sha2_password se usa en lugar de nuestro buen viejo mysql_native_password (fuente). ¡Debería ser obvio que usar un algoritmo criptográfico con varios apretones de manos es más seguro que la simple transmisión de contraseñas que ha estado allí durante 24 años!

Ahora, el problema es mysqljs en Node (el paquete que instalas con npm i mysql y usarlo en su código de nodo) todavía no es compatible con este nuevo método de autenticación predeterminado de MySQL 8. El problema está aquí: https://github.com/mysqljs/mysql/issues/1507 y aún está abierto, después de 3 años, a partir de julio de 2019.

ACTUALIZACIÓN Junio ​​de 2019: ¡Hay un nuevo PR en mysqljs ahora para solucionar este problema!

ACTUALIZACIÓN Febrero 2020: Aparentemente, está programado para venir en la versión 3 de mysqljs.

ACTUALIZACIÓN de julio de 2020: Aparentemente, todavía no está disponible (al menos a partir de abril de 2020), pero se afirma que node-mysql2 admite la solicitud de cambio de autenticación. Por favor comente a continuación si node-mysql2 funciona bien para este problema; lo probaré más tarde yo mismo.


Tus opciones actuales

Opción 1) Degradar “MySQL” para autenticarse usando la vieja “mysql_native_password”

Eso es lo que todos sugieren aquí (por ejemplo, la respuesta superior anterior). Solo entra en mysql y ejecutar una consulta que diga root está bien usar viejo mysql_native_password método de autenticación:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

Lo bueno es que la vida será simple y aún puedes usar buenas herramientas antiguas como Sequel Pro sin ningún problema. Pero el problema es que no está aprovechando un material más seguro (y genial, lea a continuación) disponible para usted.

Opción 2) Reemplazar el paquete “Node” con MySQL Connecter X DevAPI

MySQL X DevAPI para Node es un reemplazo del paquete Mysqljs de Node, proporcionado por los chicos oficiales de http://dev.mysql.com.

Funciona de maravilla apoyando caching_sha2_password autenticación. (Solo asegúrate de usar el puerto 33060 para comunicaciones de protocolo X).

Lo malo es que dejaste nuestro viejo mysql paquete al que todo el mundo está tan acostumbrado y en el que confía.

Lo bueno es que tu aplicación es más segura ahora y puedes aprovechar un montón de cosas nuevas que nuestros buenos viejos amigos no te proporcionaron. Solo echa un vistazo al tutorial de X DevAPI y verás que tiene un montón de nuevas características atractivas que pueden ser útiles. Solo necesita pagar el precio de una curva de aprendizaje, que se espera que venga con cualquier actualización tecnológica. 🙂

PD. Desafortunadamente, este paquete XDevAPI no tiene definición de tipos (comprensible por TypeScript) todavía, así que si está en mecanografiado, tendrás problemas. Traté de generar .d.ts usando dts-gen y dtsmake, pero sin éxito. Así que tenlo en mente.

¡Salud!

Usando el viejo mysql_native_password obras:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
-- or
CREATE USER 'foo'@'%' IDENTIFIED WITH mysql_native_password BY 'bar';
-- then
FLUSH PRIVILEGES;

Esto es porque caching_sha2_password se introdujo en MySQL 8.0, pero la versión de Node.js aún no está implementada. Puede ver esta solicitud de extracción y este problema para obtener más información. ¡Probablemente una solución llegará pronto!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *