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!