Je ne peux pas établir une simple connexion au serveur pour une raison quelconque. J'installe la dernière base de données MySQL Community 8.0 avec Node.JS avec les paramètres par défaut.
Ceci est mon code 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!");
});
Voici l'erreur trouvée dans l'invite de commande:
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)
J'ai lu des choses telles que: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Mais je ne sais toujours pas comment résoudre mon problème. Toute aide serait appréciée: D
Réponses:
Exécutez la requête suivante dans MYSQL Workbench
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Où en
root
tant qu'utilisateurlocalhost
comme URL etpassword
comme mot de passeExécutez ensuite cette requête pour actualiser les privilèges:
flush privileges;
Essayez de vous connecter à l'aide d'un nœud après cela.
Si cela ne fonctionne pas, essayez-le sans
@'localhost'
pièce.la source
flush privileges;
après.caching_sha2_password
est introduit dans MySQL 8.0, mais la version Node.js n'est pas encore implémentée.Voyons d'abord clairement ce qui se passe.
MySQL 8 prend en charge les méthodes d'authentification enfichables. Par défaut, l'un d'eux nommé
caching_sha2_password
est utilisé plutôt que notre bon vieuxmysql_native_password
( source ). Il devrait être évident que l'utilisation d'un algorithme de chiffrement avec plusieurs poignées de main est plus sécurisée que la simple transmission de mots de passe qui existe depuis 24 ans !Maintenant, le problème est
mysqljs
dans Node (le package avec lequel vous installeznpm i mysql
et l'utilisez dans votre code Node) ne prend pas encore en charge cette nouvelle méthode d'authentification par défaut de MySQL 8. Le problème est ici: https://github.com/mysqljs/mysql/issues/1507 et est toujours ouvert, après 3 ans, à partir de juillet 2019.(MISE À JOUR juin 2019: Il y a maintenant un nouveau PR dans mysqljs pour résoudre ce problème! ) (MISE À JOUR février 2020: Apparemment, il est prévu de venir dans la version 3 de mysqljs . )
Vos options
Option 1) Rétrograder "MySQL" pour s'authentifier en utilisant le bon vieux "native_password"
C'est ce que tout le monde suggère ici (par exemple, la première réponse ci-dessus ). Vous venez de lancer
mysql
et d'exécuter une requête disant que toutroot
va bien en utilisant l'anciennenative_password
méthode d'authentification:La bonne chose est que la vie va être simple et vous pouvez toujours utiliser de bons vieux outils comme Sequel Pro sans aucun problème . Mais le problème est que vous ne profitez pas d'un matériel plus sûr (et cool, lire ci-dessous) à votre disposition.
Option 2) Remplacer le package "Node" par MySQL Connecter X DevAPI
MySQL X DevAPI pour Node est un remplacement du package Mysqljs de Node , fourni par les gars officiels de http://dev.mysql.com .
Cela fonctionne comme un charme prenant en charge l'
caching_sha2_password
authentification. (Assurez-vous simplement d'utiliser le port33060
pour les communications du protocole X. )La mauvaise chose est que vous avez quitté notre ancien
mysql
package auquel tout le monde est tellement habitué et sur lequel il s'appuie.La bonne chose est que votre application est plus sécurisée maintenant et vous pouvez profiter d'une tonne de nouvelles choses que nos bons vieux amis n'ont pas fournies! Consultez simplement le tutoriel de X DevAPI et vous verrez qu'il a une tonne de nouvelles fonctionnalités sexy qui peuvent être utiles. Il vous suffit de payer le prix d'une courbe d'apprentissage, qui est attendue avec toute mise à niveau technologique. :)
PS. Malheureusement, ce package XDevAPI n'a pas encore de définition de types (compréhensible par TypeScript), donc si vous êtes sur typecript , vous aurez des problèmes. J'ai essayé de générer des .d.ts en utilisant
dts-gen
etdtsmake
, mais sans succès. Alors garde ça en tête.À votre santé!
la source
En utilisant les anciennes
mysql_native_password
œuvres:En effet,
caching_sha2_password
est introduit dans MySQL 8.0, mais la version Node.js n'est pas encore implémentée. Vous pouvez voir cette demande d'extraction et ce problème pour plus d'informations. Une solution viendra probablement bientôt!la source
Étapes complètes pour MySQL 8
Connectez-vous à MySQL
réinitialisez votre mot de passe
(Remplacez
your_new_password
par le mot de passe que vous souhaitez utiliser)Essayez ensuite de vous connecter à l'aide d'un nœud
la source
Bien que la réponse acceptée soit correcte, je préfère créer un nouvel utilisateur, puis utiliser cet utilisateur pour accéder à la base de données.
la source
Si vous avez rencontré cette erreur mais que vous vouliez toujours utiliser la
MySQL
version 8. Vous pouvez y parvenir en disant à MySQL Server d'utiliser le plug-in d'authentification hérité lorsque vous créez la base de données à l'aide deDocker
.Ainsi, votre
compose
fichier ressemblera à ceci:la source
command
, maismysql
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
Dans Mysql Dernier conteneur docker
la source
Si la ligne de commande ALTER USER ... ne fonctionne pas pour vous ET si vous utilisez Windows 10, essayez de suivre ces étapes:
1) Tapez MySQL dans la barre de recherche Windows
2) Ouvrez MySQL Windows Installer - Community
3) Recherchez "serveur MySQL" et cliquez sur Reconfigurer
4) Cliquez sur "Suivant" jusqu'à atteindre la phase "Méthode d'authentification"
5) Dans la phase "Méthode d'authentification", cochez la deuxième option "Utiliser la méthode d'authentification héritée"
6) Suivez ensuite les étapes données par le programme d'installation de Windows jusqu'à la fin
7) Quand c'est fait, allez dans "Services" dans la barre de recherche Windows, cliquez sur "démarrer" MySql81 ".
Maintenant, essayez à nouveau, la connexion entre MySQL et Node.js devrait fonctionner!
la source
La plupart des réponses à cette question entraînent une rétrogradation du mécanisme d'authentification de
caching_sha2_password
àmysql_native_password
. Du point de vue de la sécurité, c'est assez décevant.Ce document explique en détail
caching_sha2_password
et bien sûr pourquoi il ne devrait pas être un premier choix pour rétrograder la méthode d'authentification.Sur ce, je crois que la réponse d'Aidin devrait être la réponse acceptée. Au lieu de rétrograder la méthode d'authentification, utilisez plutôt un connecteur qui correspond à la version du serveur.
la source
La documentation originale que vous pouvez trouver ici: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
la source
J'ai MYSQL sur le serveur et l'application nodejs sur un autre serveur
Exécutez la requête suivante dans MYSQL Workbench
ALTER USER 'root' @ '%' IDENTIFIED WITH mysql_native_password BY 'password'
la source
Avec MySQL 8+, la nouvelle authentification par défaut est
caching_sha2_password
au lieu demysql_native_password
. La nouvelle méthode d'authentification plus sécurisée n'est pas encore prise en charge par lemysql
package natif , mais vous devriez envisager d'utiliser le package@mysql/xdevapi
place, qui est officiellement pris en charge et maintenu par Oracle.Pour installer le nouveau package, exécutez:
Pour vous connecter à la base de données et INSÉRER des VALEURS:
La documentation officielle du package peut être trouvée ici: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
la source
Si vous utilisez Docker, cela a fonctionné pour moi!
dans l'
docker-compose.yml
ajout des lignes suivantes:après cela,
down
le conteneur etup
encore.la source
Pour les installations mysql 8.0 existantes sur Windows 10 mysql,
lancer l'installateur,
cliquez sur "Reconfigurer" sous QuickAction (à gauche de MySQL Server), puis
cliquez sur suivant pour avancer dans les 2 écrans suivants jusqu'à l'arrivée
dans "Méthode d'authentification", sélectionnez "Utiliser la méthode d'authentification héritée (conserver la compatibilité MySQL 5.x"
Continuez à cliquer jusqu'à ce que l'installation soit terminée
la source
En plus des réponses ci-dessus; Après avoir exécuté la commande ci-dessous
Si vous obtenez une erreur comme:
Essayez ensuite dans le cmd en tant qu'administrateur; définir le chemin d'accès au dossier bin du serveur MySQL dans le cmd
puis exécutez la commande:
Cela devrait mettre à jour le serveur et les tables système.
Ensuite, vous devriez être en mesure d'exécuter avec succès les commandes ci-dessous dans une requête dans le Workbench:
n'oubliez pas d'exécuter la commande suivante:
Après toutes ces étapes, vous devriez pouvoir vous connecter avec succès à votre base de données MySQL. J'espère que cela t'aides...
la source
Il suffit d'exécuter MySQL Server Installer et de reconfigurer My SQL Server ... Cela a fonctionné pour moi.
la source
Vérifiez les privilèges et le nom d'utilisateur / mot de passe de votre utilisateur MySQL.
Pour détecter les erreurs, il est toujours utile d'utiliser la
_delegateError
méthode redéfinie . Dans votre cas, cela doit ressembler à:Cette construction vous aidera à retracer les erreurs fatales.
la source
Je viens de comprendre cela après avoir essayé de nombreuses choses. Ce qui m'a finalement permis d'ajouter
require('dotenv').config()
à mon.sequelizerc
dossier. Apparemment, sequelize-cli ne lit pas les variables env.la source
Vous pouvez ignorer l'ORM, les générateurs, etc. et simplifier votre gestion DB / SQL à l'aide de
sqler
etsqler-mdb
.la source
Le déclassement n'est peut-être pas une bonne option car:
Vous pouvez utiliser le
mysql2
package à la place demysql
. Son API est principalement compatible avec mysqljs. En outre, il a promis un soutien.Utilisez-le comme:
const mysql = require('mysql2/promise')
Vous pouvez en savoir plus sur
mysql2
ici: https://www.npmjs.com/package/mysql2J'espère que ça aide. :)
la source
J'ai le même problème avec MySQL et je le résout en utilisant XAMPP pour me connecter avec MySQL et arrêter les services dans Windows pour MySQL (panneau de configuration - Outils d'administration - Services), et dans le dossier db.js (responsable de la base de données) I videz le mot de passe (ici vous pouvez voir :)
la source