So beheben Sie das Problem mit dem Authentifizierungs-Plugin 'caching_sha2_password' kann nicht geladen werden

98

In Eclipse, als ich meine Anwendung startete, bekam ich Folgendes - Der zu verwendende Dialekt konnte nicht gefunden werden. java.sql.SQLException: Das Authentifizierungs-Plugin 'caching_sha2_password' kann nicht geladen werden.

at java.sql.SQLException: Das Authentifizierungs-Plugin 'caching_sha2_password' kann nicht geladen werden. at at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) at at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) at at com.mysql.jdbc.MysqlIO. java: 1746) unter com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) unter com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) unter com.mysql.jdbc.ConnectionImpl. connectOneTryOnly (ConnectionImpl.java:2222) unter com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) unter com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) unter com.myscl.d .JDBC4Connection. (JDBC4Connection.java:47) at at sun.reflect.NativeConstructorAccessorImpl.

Sarath Mohan
quelle

Antworten:

154

Ab MySQL 8.0.4 haben sie das Standardauthentifizierungs-Plugin für MySQL Server von mysql_native_password in caching_sha2_password geändert .

Sie können den folgenden Befehl ausführen, um das Problem zu beheben.

Beispiel Benutzername / Passwort => Student / Pass123

ALTER USER 'student'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';

Weitere Informationen finden Sie auf der offiziellen Seite: MySQL-Referenzhandbuch

Gaurav
quelle
7
Obwohl dies funktioniert, ist es besser, die MySQL Connector / J-Version zu aktualisieren (wie in einigen anderen Antworten vorgeschlagen), da Sie so das sicherere Authentifizierungs-Plugin sha2_caching verwenden können.
Mark Rotteveel
@ MarkRotteveel Ja! Dem stimme ich auch zu.
Gaurav
@ MarkRotteveel wie?
theonlygusti
4
@theonlygusti Sie müssen MySQL Connector / J auf mindestens 5.1.46 oder - besser - auf 8.0.14 aktualisieren.
Mark Rotteveel
@ MarkRotteveel wie mache ich das? stackoverflow.com/questions/54413365/…
theonlygusti
41

Andere haben auf das Grundproblem hingewiesen, aber in meinem Fall habe ich dbeaver verwendet und beim Einrichten der MySQL-Verbindung mit dbeaver zunächst den falschen MySQL-Treiber ausgewählt (Antwort hier als Antwort: https://github.com/dbeaver/dbeaver/ Issues / 4691 # issuecomment-442173584 )

Wenn Sie die MySQL-Auswahl in der folgenden Abbildung auswählen, wird der erwähnte Fehler angezeigt, da der Treiber MySQL 4+ ist, der im Datenbankinformationstipp angezeigt wird.


Für diesen Fehler führt die Auswahl der Top-MySQL 4+ in dieser Abbildung zu dem in dieser Frage erwähnten Fehler


Anstatt den MySQL-Treiber auszuwählen, wählen Sie stattdessen den MySQL 8+ -Treiber aus (siehe Abbildung unten).


Geben Sie hier die Bildbeschreibung ein

Paul
quelle
4
Danke, das war genau mein Problem. Haben Sie dann zufällig einen weiteren Fehler erhalten: "Das Abrufen öffentlicher Schlüssel ist nicht zulässig"?
Tomáš Zato - Monica
Interessant, nein nach dem oben genannten, hat dbeaver die Tabellen geladen.
Paul
1
DANKE. Das hat mir sehr geholfen. Für diejenigen , die immer noch das bekommen „Public Ket Retrieval ist nicht erlaubt“ Fehler in DBeaver fand ich einen Link , dass löst dieses hier .
jpisty
Public key retrieval is not allowed
Aderchox
37

Aktualisieren Sie Ihr mysql-connector "lib-Paket mit Ihrer mysql-Version wie unten Ich verwende die Version 8.0.13 und in pom habe ich die Version geändert:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.13</version>
</dependency>

Mein Problem hat sich danach gelöst.

alok
quelle
1
Danke für die hilfreiche Antwort. Für andere, um die neueste Version zu finden, verwenden Sie bitte diesen Link; mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf
29

Möglicherweise verwenden Sie einen falschen mysql_connector.

Verwenden Sie den Connector derselben MySQL-Version

Vishal Boinapalli
quelle
15

Ich habe diesen Fehler in einer Spring Boot-App festgestellt, aber nicht in einer anderen. Schließlich stellte ich fest, dass die Spring Boot-Version in der nicht funktionierenden Version 2.0.0.RELEASE und die funktionierende Version 2.0.1.RELEASE war. Dies führte zu einem Unterschied im MySQL Connector - 5.1.45 gegenüber 5.1.46. Ich habe die Spring Boot-Version für die App aktualisiert, die diesen Fehler beim Start ausgelöst hat, und jetzt funktioniert sie.

Greg Charles
quelle
Das hat mir geholfen!
Anand Varkey Philips
Hat für mich gearbeitet! Ich habe Version 1.5.8.RELEASE verwendet.
Ionuț Ciuta
14

Sie müssen nur Ihren älteren Connector löschen und eine neue Version herunterladen (mysql-connector-java-5.1.46).

Turab
quelle
Es funktionierte. Ich habe fast 2 Tage damit verbracht, diese Lösung zu finden. Vielen Dank.
Hemant Nagpal
10

Ich verwende MySQL 8.0.12 und das Aktualisieren des MySQL-Connectors auf MySQL-Connector-Java-8.0.12 hat das Problem für mich behoben.

Hoffe es hilft jemandem.

Santosh Gatlewar
quelle
Upgrade auf mindestens 5.1.46 oder die neueste Version wie heute haben wir 8.0.18. Dies hilft, das Problem zu beheben.
Atul
8

Wie oben erwähnt:

Ab MySQL 8.0.4 hat das MySQL-Team das Standard-Authentifizierungs-Plugin für den MySQL-Server von mysql_native_password in caching_sha2_password geändert.

Es gibt also drei Möglichkeiten, um dieses Problem zu beheben:

 1. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_name';
    GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost';
    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
    'user_name';

 2. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user_name';
GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost'

 3. If the user is already created, the use the following command:

    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
        'user_name';
DC-
quelle
7

Dies könnten Ihre Konnektoren für MySQL sein, die aktualisiert werden müssen, da MySQL8 die Verschlüsselung von Passwörtern geändert hat - ältere Konnektoren verschlüsseln sie daher falsch.

Das Maven Repo für den Java Connector finden Sie hier .
Wenn Sie das Flyway-Plugin verwenden , sollten Sie auch eine Aktualisierung in Betracht ziehen !

Dann können Sie einfach Ihren Maven Pom aktualisieren mit:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

Oder für andere, die Gradle verwenden , können Sie build.gradle aktualisieren mit:

 buildscript {
    ext {
        ...
    }
    repositories {
        ...
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('mysql:mysql-connector-java:8.0.11')
    }
 }

Alles was Sie wirklich tun müssen (Beispiel build.gradle)

KeaganFouche
quelle
5

Sie haben ein Problem mit der neuen MySQL-Version, die mit dem Plugin "caching_sha2_password" geliefert wurde. Befolgen Sie den folgenden Befehl, um das Problem zu beheben.

DROP USER 'your_user_name'@'%';
CREATE USER 'your_user_name'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_user_name'@'%' identified by 'your_user_password';

Oder Sie können einfach den folgenden Befehl verwenden, um Ihre Berechtigungen unverändert zu lassen:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

quelle
Hallo, was du mit "your_db_name. *" In der dritten Zeile meinst, wofür ist das *
Sarath Mohan
Der Datenbankname, unter dem der Benutzer den Zugriff erhalten soll. oder Sie können einfach nur die letzte ALTER-Anweisung verwenden, die auch Ihr Problem löst. In ALTER müssen Sie nur Ihren Benutzernamen übergeben, der alles ist
GEWÄHRLEISTEN SIE ALLE PRIVILEGIEN FÜR Ihren_Datenbanknamen. * TO 'Ihr_Benutzername' @ '%', gekennzeichnet durch 'Ihr_Benutzerpasswort';
Sarath Mohan
Okay, Sie haben das Problem, während Sie eine Verbindung zur Datenbank herstellen, oder? Das heißt, Sie geben auch einen DB-Namen in einer Verbindungszeichenfolge an. Derselbe DB muss anstelle Ihres_db_namens hinzugefügt werden. hoffe du
4

Ich bin auf dieses Problem bei NetBeans gestoßen, als ich mit einem vorgefertigten Projekt aus diesem Murach JSP-Buch gearbeitet habe . Das Problem wurde durch die Verwendung des 5.1.23 Connector J mit einer MySQL 8.0.13-Datenbank verursacht. Ich musste den alten Treiber durch einen neuen ersetzen. Nach dem Herunterladen des Connector J wurden drei Schritte ausgeführt.

So ersetzen Sie das NetBeans-Projekt Connector J:

  1. Laden Sie die aktuellen Stecker J von hier . Dann kopieren Sie es in Ihr Betriebssystem.

  2. Klicken Sie in NetBeans auf die Registerkarte Dateien neben der Registerkarte Projekte. Suchen Sie den mysql-connector-java-5.1.23.jar oder einen anderen alten Connector, den Sie haben. Löschen Sie diesen alten Stecker. Fügen Sie den neuen Connector ein.

  3. Klicken Sie auf die Registerkarte Projekte. Navigieren Sie zum Ordner Libraries. Löschen Sie den alten MySQL-Connector. Klicken Sie mit der rechten Maustaste auf den Ordner Libraries. Wählen Sie Glas / Ordner hinzufügen. Navigieren Sie zu dem Speicherort, an dem Sie den neuen Connector platzieren, und wählen Sie Öffnen.

  4. Klicken Sie auf der Registerkarte Projekt mit der rechten Maustaste auf das Projekt. Wählen Sie unten im Popup-Menü die Option Datenquellen auflösen. Klicken Sie auf Verbindung hinzufügen. Zu diesem Zeitpunkt springt NetBeans vorwärts und geht davon aus, dass Sie den alten Connector verwenden möchten. Klicken Sie auf die Schaltfläche Zurück, um zum übersprungenen Fenster zurückzukehren. Entfernen Sie den alten Stecker und fügen Sie den neuen Stecker hinzu. Klicken Sie auf Weiter und Verbindung testen, um sicherzustellen, dass es funktioniert.

Als Videoreferenz fand ich dies nützlich. Für IntelliJ IDEA fand ich dies nützlich.

Jack J.
quelle
Mir ist klar, dass meine Antwort nicht ganz relevant ist. Ich habe meine NetBeans-Antwort hier veröffentlicht, da meine eigene Frage als Duplikat dieser Frage markiert ist.
Jack J
4

Ich habe genau das gleiche Problem mit der folgenden Abhängigkeit gemacht:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>

Ich wechsle gerade zu Version 46 und alles funktioniert.

José Junior
quelle
3

Ich denke, es ist besser, Ihr lib-Paket "mysql-connector" zu aktualisieren, damit die Datenbank noch sicherer ist.

Ich verwende MySQL der Version 8.0.12. Als ich mysql-connector-java auf Version 8.0.11 aktualisierte, war das Problem behoben.

Jack Ma
quelle
2

Wenn Sie Ihren Connector auf eine Version aktualisieren können, die das neue Authentifizierungs-Plugin von MySQL 8 unterstützt, tun Sie dies. Wenn dies aus irgendeinem Grund keine Option ist, ändern Sie die Standardauthentifizierungsmethode Ihres Datenbankbenutzers in native.

DataVader
quelle
0

Entfernen Sie die Connect-JAR-Datei, wenn Sie die Connector-JAR-Datei mit mehreren Versionen hinzugefügt haben. Fügen Sie nur die Connector-JAR-Datei hinzu, die mit Ihrer SQL-Version übereinstimmt.

user10434384
quelle
0

Eine andere Ursache könnte die Tatsache sein, dass Sie auf den falschen Port zeigen.

Stellen Sie sicher, dass Sie tatsächlich auf den richtigen SQL Server zeigen. Möglicherweise wird MySQL standardmäßig unter 3306 installiert, Sie benötigen jedoch möglicherweise eine andere MySQL-Instanz.

Überprüfen Sie die Ports und führen Sie eine Abfrage für die Datenbank aus.

Aquazi
quelle