No puedo hacer una conexión simple al servidor por alguna razón. Instalo la nueva base de datos MySQL Community 8.0 junto con Node.JS con la configuración predeterminada.
Este es mi código node.js
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
A continuación se muestra el error encontrado en el símbolo del sistema:
C:\Users\mysql-test>node app.js
C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
r.js:80
throw err; // Rethrow non-MySQL errors
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
--------------------
at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)
He leído sobre algunas cosas como: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Pero todavía no estoy seguro de cómo solucionar mi problema. Cualquier ayuda sería apreciada: D
Respuestas:
Ejecute la siguiente consulta en MYSQL Workbench
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Donde
root
como usuariolocalhost
como URL ypassword
como contraseñaLuego ejecute esta consulta para actualizar los privilegios:
flush privileges;
Intente conectarse usando el nodo después de hacerlo.
Si eso no funciona, pruébalo sin
@'localhost'
parte.fuente
flush privileges;
después.caching_sha2_password
se introdujo en MySQL 8.0, pero la versión Node.js aún no está implementada.Primero dejemos en claro lo que está sucediendo.
MySQL 8 tiene soporte para métodos de autenticación conectables. Por defecto, uno de ellos nombrado
caching_sha2_password
se utiliza en lugar de nuestro viejo bienmysql_native_password
( fuente ). ¡Debería ser obvio que usar un algoritmo criptográfico con varios apretones de manos es más seguro que el simple paso de contraseña que ha estado allí durante 24 años !Ahora, el problema está
mysqljs
en Node (el paquete con el que lo instalanpm i mysql
y lo usa en su código de Node) aún no admite 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 en junio de 2019: ¡ahora hay un nuevo RP en mysqljs para solucionarlo! ) (ACTUALIZACIÓN en febrero de 2020: aparentemente está programado para la versión 3 de mysqljs ) .
Sus opciones
Opción 1) Reduzca la versión de "MySQL" para autenticar usando la buena "contraseña_natal"
Eso es lo que todo el mundo sugiere aquí (por ejemplo, la respuesta más arriba ). Simplemente ingresa
mysql
y ejecuta una consulta que dice queroot
está bien usando elnative_password
método anterior para la autenticación:Lo bueno es que la vida será simple y todavía puedes usar buenas herramientas antiguas como Sequel Pro sin ningún problema . Pero el problema es que no está aprovechando las cosas más seguras (y geniales, lea a continuación) disponibles para usted.
Opción 2) Reemplace el paquete "Nodo" 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 como un encanto que admite la
caching_sha2_password
autenticación. (Solo asegúrese de usar el puerto33060
para las comunicaciones del Protocolo X ).Lo malo es que has dejado nuestro
mysql
paquete anterior en el que todos estamos tan acostumbrados y confiamos.¡Lo bueno es que su aplicación es más segura ahora y puede aprovechar un montón de cosas nuevas que nuestros viejos amigos no proporcionaron! Solo echa un vistazo al tutorial de X DevAPI y verás que tiene un montón de nuevas características sexys que pueden ser útiles. Solo tiene que pagar el precio de una curva de aprendizaje, que se espera que venga con cualquier actualización tecnológica. :)
PD. Desafortunadamente, este paquete XDevAPI aún no tiene una definición de tipos (comprensible por TypeScript), por lo que si está en typecript , tendrá problemas. Traté de generar .d.ts usando
dts-gen
ydtsmake
, pero no tuve éxito. Así que tenlo en mente.¡Salud!
fuente
Usando los viejos
mysql_native_password
trabajos:Esto se debe a que
caching_sha2_password
se introdujo en MySQL 8.0, pero la versión 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 vendrá pronto!fuente
Pasos completos para MySQL 8
Conéctese a MySQL
Restablecer su contraseña
(Reemplace
your_new_password
con la contraseña que desea usar)Luego intente conectarse usando el nodo
fuente
Aunque la respuesta aceptada es correcta, preferiría crear un nuevo usuario y luego usar ese usuario para acceder a la base de datos.
fuente
Si encontró este error pero aún quería usar la
MySQL
versión 8. Puede lograrlo diciéndole a MySQL Server que use el complemento de autenticación heredado cuando cree la base de datos usandoDocker
.Entonces, su
compose
archivo se verá así:fuente
command
, pero sigo recibiendo el mensaje de error de autenticación no compatible cuando lo usomysql
en Node.jsError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
En Mysql Latest docker container
fuente
Si la línea de comando ALTER USER ... no funciona para usted Y si está utilizando Windows 10, intente seguir esos pasos:
1) Escriba MySQL en la barra de búsqueda de Windows
2) Abra el instalador de Windows MySQL - Comunidad
3) Busque "servidor MySQL" y haga clic en Reconfigurar
4) Haga clic en "Siguiente" hasta llegar a la fase "Método de autenticación"
5) En la fase "Método de autenticación", marque la segunda opción "Usar método de autenticación heredado"
6) Luego siga los pasos dados por el instalador de Windows hasta el final
7) Cuando termine, vaya a "Servicios" desde la barra de búsqueda de Windows, haga clic en "iniciar" MySql81 ".
Ahora, intente nuevamente, ¡la conexión entre MySQL y Node.js debería funcionar!
fuente
La mayoría de las respuestas en esta pregunta resultan en una degradación del mecanismo de autenticación de
caching_sha2_password
amysql_native_password
. Desde una perspectiva de seguridad, esto es bastante decepcionante.Este documento analiza ampliamente
caching_sha2_password
y, por supuesto, por qué NO debería ser una primera opción para degradar el método de autenticación.Con eso, creo que la respuesta de Aidin debería ser la respuesta aceptada. En lugar de degradar el método de autenticación, use un conector que coincida con la versión del servidor.
fuente
Documentación original que puede encontrar aquí: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
fuente
Tengo MYSQL en el servidor y la aplicación nodejs en otro servidor
Ejecute la siguiente consulta en MYSQL Workbench
ALTERAR USUARIO 'root' @ '%' IDENTIFICADO CON mysql_native_password POR 'contraseña'
fuente
Con MySQL 8+, la nueva autenticación predeterminada es en
caching_sha2_password
lugar demysql_native_password
. El nuevo y más seguro método de autenticación aún no es compatible con elmysql
paquete nativo , pero debería considerar usar el paquete@mysql/xdevapi
, que es oficialmente compatible y mantenido por Oracle.Para instalar el nuevo paquete, ejecute:
Para conectarse a la base de datos e INSERTAR algunos VALORES:
La documentación oficial del paquete se puede encontrar aquí: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
fuente
Si estás usando Docker, ¡funcionó para mí!
en el
docker-compose.yml
agregar las siguientes líneas:después de eso,
down
el contenedor yup
otra vez.fuente
Para las instalaciones existentes de mysql 8.0 en Windows 10 mysql,
instalador de lanzamiento,
haga clic en "Reconfigurar" en QuickAction (a la izquierda del servidor MySQL), luego
Haga clic en Siguiente para avanzar por las siguientes 2 pantallas hasta llegar
en "Método de autenticación", seleccione "Usar método de autenticación heredado (Conservar la compatibilidad con MySQL 5.x"
Sigue haciendo clic hasta que se complete la instalación
fuente
Además de las respuestas anteriores; Después de ejecutar el siguiente comando
Si obtiene un error como:
Luego intente en el cmd como administrador; establecer la ruta a la carpeta bin del servidor MySQL en el cmd
y luego ejecuta el comando:
Esto debería actualizar el servidor y las tablas del sistema.
Entonces debería poder ejecutar con éxito los siguientes comandos en una consulta en el Workbench:
luego recuerde ejecutar el siguiente comando:
Después de todos estos pasos debería poder conectarse con éxito a su base de datos MySQL. Espero que esto ayude...
fuente
Simplemente ejecute MySQL Server Installer y reconfigure My SQL Server ... Esto funcionó para mí.
fuente
Verifique los privilegios y el nombre de usuario / contraseña para su usuario de MySQL.
Para detectar errores, siempre es útil utilizar un
_delegateError
método anulado . En su caso, esto tiene que verse así:Esta construcción lo ayudará a rastrear errores fatales.
fuente
Acabo de resolver esto después de probar numerosas cosas. Lo que finalmente lo hizo por mí fue agregar
require('dotenv').config()
a mi.sequelizerc
archivo. Aparentemente sequelize-cli no lee las variables env.fuente
Puede omitir ORM, constructores, etc. y simplificar su administración de DB / SQL usando
sqler
ysqler-mdb
.fuente
La degradación podría no ser una buena opción ya que:
Puede usar el
mysql2
paquete en lugar demysql
. Es principalmente API compatible con mysqljs. Además, tiene promesas de apoyo.Úselo como:
const mysql = require('mysql2/promise')
Puede leer más sobre
mysql2
aquí: https://www.npmjs.com/package/mysql2Espero eso ayude. :)
fuente
Tengo el mismo problema con MySQL y lo resuelvo usando XAMPP para conectarme con MySQL y detener los servicios en Windows para MySQL (panel de control - Herramientas administrativas - Servicios), y en la carpeta db.js (responsable de la base de datos) I deje la contraseña vacía (aquí puede ver :)
fuente