Maison > Questions et réponses > le corps du texte
Pour une raison quelconque, je ne parviens pas à établir une simple connexion au serveur. J'ai installé la dernière base de données MySQL Community 8.0 avec Node.JS en utilisant les paramètres par défaut.
Voici 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 les erreurs trouvées dans l'invite de commande :
C:Usersmysql-test>node app.js C:Usersmysql-testnode_modulesmysqllibprotocolParse 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:Usersmysql- testnode_modulesmysqllibprotocolsequencesSequence.js:52:14) at Handshake.ErrorPacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolsequencesHandshake.js:130:18) at Protocol._parsePacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolProtocol.js:279:23) at Parser.write (C:Usersmysql-testnode_modulesmys qllibprotocolParser.js:76:12) at Protocol.write (C:Usersmysql-testnode_modulesm ysqllibprotocolProtocol.js:39:16) at Socket.<anonymous> (C:Usersmysql-testnode_modul esmysqllibConnection.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:Usersmysql-testnode_module smysqllibprotocolProtocol.js:145:48) at Protocol.handshake (C:Usersmysql-testnode_modul esmysqllibprotocolProtocol.js:52:23) at Connection.connect (C:Usersmysql-testnode_modul esmysqllibConnection.js:130:18) at Object.<anonymous> (C:Usersmysql-testserver.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 quelque chose comme : 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.
P粉1619397522023-10-11 09:08:13
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
然后 刷新权限
mysql2
(而不是 mysql
)并使用它 - npm我 mysql2
和 mysql = require('mysql2');
. Nous devons d’abord comprendre ce qui s’est passé.
MySQL 8 prend en charge les méthodes d'authentification enfichables. Par défaut, l'un d'eux nommé caching_sha2_password
的密码,而不是我们的旧 mysql_native_password
(source) est utilisé. Apparemment, l'algorithme de cryptage utilisant plusieurs poignées de main est plus sécurisé que la transmission normale de mot de passe utilisée dans 24. Année !
Maintenant, le problème est que les packages dans Node mysqljs
(使用 npm i mysql
qui l'installent et l'utilisent dans le code Node) ne prennent pas encore en charge cette nouvelle méthode d'authentification par défaut pour MySQL 8. Le problème est ici : https://github.com/mysqljs/mysql/issues/1507 a> En juillet 2019, toujours ouvert trois ans plus tard.
Mise à jour de juin 2019 : Il y a un nouveau PR dans mysqljs a> pour résoudre ce problème maintenant !
Mise à jour de février 2020 : Apparemment, il est prévu pour arriver dans la version 3 de mysqljs.
Mise à jour de juillet 2020 : Apparemment, ce n'est pas encore (au moins en avril 2020) , mais affirme que < a href="https://github.com/sidorares/node-mysql2" rel="noreferrer">node-mysql2 prend en charge les demandes de changement d'authentification. Si node-mysql2
fonctionne pour vous, veuillez laisser un commentaire ci-dessous – je le testerai moi-même plus tard.
Mise à jour d'avril 2021 : Le problème semble toujours exister, il y a à peine 3 jours, quelqu'un a créé un fork et l'a implémenté - mais pas encore officiellement dans le package mysql.js. De plus, d'après les commentaires ci-dessous, il semble que le paquet mysql2 fonctionne correctement et prend correctement en charge le changement d'authentification.
C'est ce que tout le monde suggère ici (comme la meilleure réponse ci-dessus). Il vous suffit de saisir la méthode mysql
并运行一个查询,说明 root
可以使用旧的 mysql_native_password
pour vous authentifier :
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...
La bonne nouvelle est que la vie devient plus facile et que vous pouvez toujours utiliser de bons vieux outils comme Sequel Pro sans aucune question. Mais le problème est que vous ne profitez pas de quelque chose de plus sûr (et de plus cool, lisez ci-dessous).
MySQL Il fonctionne comme un support pour la communication selon le protocole X. )
Dommage que vous vous soyez éloigné de l'ancien forfait caching_sha2_password
身份验证的超级按钮。 (只需确保您使用端口 33060
auquel chacun d'entre nous était habitué et sur lequel il comptait.
Le bonus, c'est que vos applications sont désormais plus sécurisées et que vous pouvez profiter de tonnes de nouvelles fonctionnalités que notre bon vieil ami n'offre pas ! Consultez simplement le
et vous découvrirez qu'il contient des tonnes de nouvelles fonctionnalités sexy qui peuvent vous être utiles. Il vous suffit de payer le prix de la courbe d’apprentissage, qui accompagne toute mise à niveau technologique. :)mysql
PS. Malheureusement, ce package XDevAPI n'a pas encore de définitions de type (que TypeScript comprend), donc si vous utilisez
, vous aurez des problèmes. J'ai essayé d'utiliser dts-gen et dtsmake pour générer le .d.ts sans succès. Alors s’il vous plaît, gardez cela à l’esprit. Comme mentionné ci-dessus, le package mysql (lien du package NPM) a toujours ce problème (en avril 2021). Mais le package mysql2 (lien du package NPM) ne l'est pas. Donc ce qui suit devrait probablement être la réponse facile ! Remarque, Option 3) [Recommandé] Remplacez "mysql.js" par le package "mysql2.js"
npm un mysql && npm i mysql2
mysql2
是流行的 mysql
的一个分支,但它的受欢迎程度(4 月份 mysql2
每周下载量为 62 万次) 2020 年)已接近原始软件包(2021 年 4 月 mysql
720K téléchargements par semaine), il semble donc raisonnable de faire le changement !
P粉1987499292023-10-11 00:55:10
Exécutez la requête suivante dans MYSQL Workbench
更改用户 'root'@'localhost' 通过 mysql_native_password BY 'password' 进行识别;
où root
se trouve votre utilisateur
localhost
comme URL
et password
comme mot de passe
Ensuite, exécutez cette requête pour actualiser les autorisations :
刷新权限;
Après cela, essayez de vous connecter à l'aide d'un nœud.
Si cela ne fonctionne pas, essayez sans la partie @'localhost'
.