Lösen Sie das Problem, dass der Node.js MySQL-Client das Authentifizierungsprotokoll nicht unterstützt

Lösen Sie das Problem, dass der Node.js MySQL-Client das Authentifizierungsprotokoll nicht unterstützt

Vorwort

Das MySQL-Modul (Projektadresse ist https://github.com/mysqljs/mysql) ist ein in JavaScript geschriebener Open-Source-MySQL-Treiber, der MySQL in Node.js-Anwendungen betreiben kann. Während der Verwendung trat jedoch das Problem „ER_NOT_SUPPORTED_AUTH_MODE“ auf.

Dieser Artikel beschreibt die Ursache und Lösung dieses Problems.

Fehlermeldung

Wenn ich versuche, mithilfe des MySQL-Moduls eine Verbindung zu MySQL 8 herzustellen, erhalte ich die folgende Fehlermeldung:

D:\ArbeitsbereichGithub\nodejs-book-samples\samples\mysql-demo\index.js:17
Fehler auslösen;
^
Fehler: ER_NOT_SUPPORTED_AUTH_MODE: Der Client unterstützt das vom Server angeforderte Authentifizierungsprotokoll nicht. Erwägen Sie ein Upgrade des MySQL-Clients
bei Handshake.Sequence._packetToError (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
bei Handshake.ErrorPacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
bei Protocol._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:291:23)
bei Parser._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:433:10)
bei Parser.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:43:10)
bei Protocol.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:38:16)
bei Socket.<anonym> (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:91:28)
bei Socket.<anonym> (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:525:10)
bei Socket.emit (events.js:196:13)
bei addChunk (_stream_readable.js:290:12)
--------------------
bei Protocol._enqueue (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:144:48)
bei Protocol.handshake (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:51:23)
bei Connection.connect (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:119:18)
bei Objekt.<anonym> (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\index.js:12:12)
bei Module._compile (internal/modules/cjs/loader.js:759:30)
bei Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
bei Module.load (intern/modules/cjs/loader.js:628:32)
bei Function.Module._load (intern/modules/cjs/loader.js:555:12)
bei Function.Module.runMain (intern/modules/cjs/loader.js:826:10)
bei internal/main/run_main_module.js:17:11

Fehlerursache

Der Grund für diesen Fehler liegt darin, dass das neueste MySQL-Modul die Verschlüsselungsmethode „caching_sha2_password“ von MySQL 8 derzeit nicht vollständig unterstützt und „caching_sha2_password“ die Standardverschlüsselungsmethode in MySQL 8 ist. Daher verwendet der folgende Befehl standardmäßig die Verschlüsselungsmethode „caching_sha2_password“ und das Konto und das Kennwort können nicht im MySQL-Modul verwendet werden.

mysql> ALTER USER 'root'@'localhost' IDENTIFIZIERT DURCH '123456';
Abfrage OK, 0 Zeilen betroffen (0,12 Sek.)

Problemumgehung

Die Lösung besteht darin, das Kennwort des Root-Benutzers zu ändern und die Verschlüsselungsmethode anzugeben, die das MySQL-Modul unterstützen kann:

mysql> ALTER USER 'root'@'localhost' IDENTIFIZIERT MIT mysql_native_password DURCH '123456';
Abfrage OK, 0 Zeilen betroffen (0,12 Sek.)

Die obige Anweisung zeigt, dass die Verschlüsselungsmethode mit „mysql_native_password“ angegeben ist. Diese Methode wird vom MySQL-Modul unterstützt.

Führen Sie die Anwendung erneut aus. Sie sehen die folgende Konsolenausgabe:

$ Knotenindex.js
Das Ergebnis ist: RowDataPacket { user_id: 1, username: 'Benutzername' }

Darunter ist „RowDataPacket { user_id: 1, username: '老卫' }“ das Ergebnis der Datenbankabfrage.

Quellcode

Die Beispiele in diesem Abschnitt finden Sie in der Anwendung „mysql-demo“ unter https://github.com/waylau/nodejs-book-samples.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Einführung in die Verwendung des MySQL mysqladmin-Clients
  • Wie stellt MySQL eine Verbindung zum entsprechenden Clientprozess her?
  • Lösen Sie das Problem, dass der MySql-Client in Sekunden beendet wird (my.ini nicht gefunden).
  • Beispiel für die asynchrone MySQL-Client-Implementierung von PHP Swoole
  • Lösung für das Problem, dass sich der mysql8.0.11-Client nicht anmelden kann
  • Detaillierte Erklärung der MySQL/Java-Server-Unterstützung für Emoji und Problemlösung
  • Erste Schritte mit der NodeJS-Serverentwicklung (Express+MySQL)
  • MySQL-Verbindungspool für App-Server (unterstützt hohe Parallelität)
  • Interpretieren von MySQL-Client- und Serverprotokollen

<<:  Das WeChat-Applet implementiert eine einfache handschriftliche Signaturkomponente

>>:  Detaillierte Erläuterung des Browser-Negotiation-Cache-Prozesses basierend auf nginx

Artikel empfehlen

Zusammenfassung der grundlegenden Operationen für MySQL-Anfänger

Bibliotheksbetrieb Abfrage 1.SHOW DATABASE; ----A...

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

Vergleich der Effizienz der Dateneinfügung in MySQL

Beim Einfügen von Daten stellte ich fest, dass ic...

Analyse der Initialisierung des Quellcodes des Linux-Kernel-Schedulers

Inhaltsverzeichnis 1. Einleitung 2. Grundkonzepte...

Pycharm2017 realisiert die Verbindung zwischen Python3.6 und MySQL

In diesem Artikel erfahren Sie, wie Sie Python3.6...

Detaillierte Analyse des React Native-Startvorgangs

Einführung: Dieser Artikel verwendet das von reac...

Zusammenfassung zur Verwendung des Ausrufezeichen-Befehls (!) unter Linux

Vorwort Vor kurzem hat unsere Firma MBP konfiguri...

Einführung in Docker-Container

1. Übersicht 1.1 Grundlegende Konzepte: Docker is...

Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

Vorwort Vor Kurzem wurde ein Teil der Geschäftstä...

Implementierung eines einfachen Timers in JavaScript

In diesem Artikelbeispiel wird der spezifische Ja...

So konfigurieren Sie den Nginx-Lastausgleich

Inhaltsverzeichnis Nginx-Lastausgleichskonfigurat...

Spezifische Verwendung von MySQL-Globalsperren und Sperren auf Tabellenebene

Inhaltsverzeichnis Vorwort Globale Sperre Tabelle...

Vue implementiert einen einfachen Lupeneffekt

In diesem Artikelbeispiel wird der spezifische Co...

Docker löscht private Bibliotheksbilder vollständig

Werfen wir zunächst einen Blick auf die allgemein...

Die heißesten Trends im Webdesign UI im Jahr 2013 Die beliebtesten UI-Designs

Die Zeit vergeht wie im Flug und in nur sechs Tag...