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

So beschränken Sie das Eingabefeld in HTML auf die Eingabe reiner Zahlen

Beschränken Sie input Eingabefeld auf reine Zahle...

Eine kurze Diskussion über die MySQL-Zeilenanzahl

Wir alle kennen die MySQL-Funktion count(), mit d...

Zusammenfassung der Wissenspunkte zum CSS-Frontend (unbedingt lesen)

1. Das Konzept von CSS: (Cascading Style Sheet) V...

Detaillierte Erläuterung des Lernens von CSS-Zählerattributen

Das CSS-Zählerattribut wird von fast allen Browse...

Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Vorwort Ich glaube, dass die Syntax von MySQL nic...

Analyse der zum Ausführen von Docker erforderlichen Berechtigungen

Zum Ausführen von Docker sind Root-Rechte erforde...

Installation, Aktivierung und Konfiguration von ModSecurity unter Apache

ModSecurity ist ein leistungsstarkes Paketfiltert...

Implementierung des CSS-Ladeeffekts Pac-Man

emmm, der Name ist nur eine zufällige Vermutung 2...

Installations- und Nutzungsprotokoll von VMware ESXi (mit Download)

Inhaltsverzeichnis 1. Installieren Sie ESXi 2. ES...

Eine Methode zum Erstellen von Karussellbildern mit CSS3

Diashows sieht man häufig auf Webseiten. Sie enth...

Konvertierung von virtuellem Dom in reales Dom mit Vue

Es gibt eine andere Baumstruktur Javascript-Objek...