Come risolvere il problema Impossibile caricare il plug-in di autenticazione "caching_sha2_password"


109

In Eclipse, quando ho avviato la mia applicazione, ho ottenuto questo - Impossibile scoprire il dialetto da usare. java.sql.SQLException: impossibile caricare il plug-in di autenticazione "caching_sha2_password".

in java.sql.SQLException: impossibile caricare il plug-in di autenticazione "caching_sha2_password". su com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) su com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) su com.mysql.jdbc.Mysggke.proqluthHands java: 1746) su com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) su com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) su com.mysql.jdbc.ConnectionImpl. connectOneTryOnly (ConnectionImpl.java:2222) su com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) su com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) su com.mysql.jdbc .JDBC4Connection. (JDBC4Connection.java:47) su sun.reflect.NativeConstructorAccessorImpl.

Risposte:


167

A partire da MySQL 8.0.4, hanno modificato il plug-in di autenticazione predefinito per il server MySQL da mysql_native_password a caching_sha2_password .

Puoi eseguire il comando seguente per risolvere il problema.

nome utente / password di esempio => studente / pass123

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

Fare riferimento alla pagina ufficiale per i dettagli: MySQL Reference Manual


8
Sebbene funzioni, è meglio aggiornare la versione MySQL Connector / J (come suggerito da alcune delle altre risposte) in quanto ciò consente di utilizzare il plug-in di autenticazione sha2_caching più sicuro.
Mark Rotteveel

@MarkRotteveel Sì! Sono d'accordo anche su questo.
Gaurav

@MarkRotteveel come?
theonlygusti

4
@theonlygusti Devi aggiornare MySQL Connector / J almeno a 5.1.46, o - meglio - a 8.0.14.
Mark Rotteveel

@MarkRotteveel come posso farlo? stackoverflow.com/questions/54413365/...
theonlygusti

66

Altri hanno indicato il problema principale, ma nel mio caso stavo usando dbeaver e inizialmente durante l'impostazione della connessione mysql con dbeaver stavo selezionando il driver mysql sbagliato (credito qui per la risposta: https://github.com/dbeaver/dbeaver/ issue / 4691 # issuecomment-442173584 )

Selezionando la scelta di MySQL nella figura seguente verrà visualizzato l'errore menzionato poiché il driver è mysql 4+ che può essere visto nel suggerimento delle informazioni sul database.


Per questo errore, la selezione della prima scelta di mysql 4+ in questa figura darà l'errore menzionato in questa domanda


Invece di selezionare il driver MySQL, seleziona il driver MySQL 8+, mostrato nella figura sotto.


inserisci qui la descrizione dell'immagine


6
Grazie, questo era esattamente il mio problema. Ti è capitato di ricevere un altro errore: "Recupero chiave pubblica non consentito"?
Tomáš Zato - Ripristina Monica il

Interessante, no dopo quanto sopra, dbeaver ha caricato le tabelle.
Paul,

4
GRAZIE. Questo mi ha aiutato molto. Per coloro che stanno ancora ricevendo l'errore "Public Ket Retrieval is not allowed" in DBeaver ho trovato un collegamento che risolve questo problema qui .
jpisty

3
Public key retrieval is not allowed
aderchox

43

Aggiorna il tuo pacchetto lib mysql-connector "con la tua versione mysql come di seguito sto usando la versione 8.0.13 e in pom ho cambiato la versione:

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

Il mio problema è stato risolto dopo questo.


1
Grazie per l'utile risposta. Per altri, per trovare l'ultima versione, utilizzare questo collegamento; mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf

31

Forse stai usando mysql_connector sbagliato.

Usa il connettore della stessa versione di mysql


16

Ho riscontrato questo errore in un'app Spring Boot, ma non in un'altra. Infine, ho scoperto che la versione Spring Boot in quella non funzionante era 2.0.0.RELEASE e quella che funzionava era 2.0.1.RELEASE. Ciò ha portato a una differenza nel connettore MySQL: 5.1.45 rispetto a 5.1.46. Ho aggiornato la versione Spring Boot per l'app che generava questo errore all'avvio e ora funziona.


Questo mi ha aiutato!
Anand Varkey Philips

Ha funzionato per me! Stavo usando la versione 1.5.8.RELEASE.
Ionuț Ciuta

15

Devi solo eliminare il tuo vecchio connettore e scaricare la nuova versione (mysql-connector-java-5.1.46)


Ha funzionato. Ho sprecato quasi 2 giorni per trovare questa soluzione. Grazie.
Hemant Nagpal

11

Sto usando mysql 8.0.12 e l'aggiornamento del connettore mysql a mysql-connector-java-8.0.12 ha risolto il problema per me.

Spero che aiuti qualcuno.


Esegui l'upgrade almeno alla 5.1.46 o all'ultima versione come oggi abbiamo 8.0.18. Ciò aiuterà a risolvere il problema.
Atul

9

Come menzionato in sopra repilies:

A partire da MySQL 8.0.4, il team MySQL ha modificato il plug-in di autenticazione predefinito per il server MySQL da mysql_native_password a caching_sha2_password.

Quindi ci sono tre modi per risolvere questo problema:

 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';

8

Questi potrebbero essere i tuoi connettori per MySQL che devono essere aggiornati, poiché MySQL8 ha modificato la crittografia delle password, quindi i connettori più vecchi le crittografano in modo errato.

Il repository Maven per il connettore Java può essere trovato qui .
Se usi il plugin flyway , dovresti anche considerare di aggiornarlo !

Quindi puoi semplicemente aggiornare il tuo pom maven con:

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

Oppure per gli altri che usano Gradle , puoi aggiornare build.gradle con:

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

Tutto quello che devi veramente fare (esempio build.gradle)


5

Stai riscontrando problemi con la nuova versione di MySQL fornita con il plug-in "caching_sha2_password", segui il comando seguente per risolverlo.

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';

Oppure puoi semplicemente usare il comando seguente per mantenere i tuoi privilegi così come sono:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

Ciao, cosa intendi con "your_db_name. *" Sulla terza riga cosa rappresenta *
Sarath Mohan

Il nome del database a cui l'utente suppone di ottenere l'accesso. oppure puoi semplicemente utilizzare solo l'ultima istruzione ALTER che risolverà anche il tuo problema. In ALTER devi solo passare il tuo nome utente, questo è tutto

GARANTIRE TUTTI I PRIVILEGI SU your_db_name. * A "your_user_name" @ "%" identificato da "your_user_password";
Sarath Mohan

OK, stai affrontando il problema durante la connessione a DB, giusto? Significa che stai anche specificando un nome DB in una stringa di connessione, lo stesso DB deve essere aggiunto al posto di your_db_name. spero che sia chiaro

4

Mi sono imbattuto in questo problema su NetBeans mentre lavoravo con un progetto già pronto da questo libro JSP di Murach . Il problema è stato causato dall'utilizzo del connettore J 5.1.23 con un database MySQL 8.0.13. Avevo bisogno di sostituire il vecchio driver con uno nuovo. Dopo aver scaricato il connettore J, sono stati necessari tre passaggi.

Come sostituire NetBeans Project Connector J:

  1. Scarica l'attuale connettore J da qui . Quindi copialo nel tuo sistema operativo.

  2. In NetBeans, fai clic sulla scheda File che si trova accanto alla scheda Progetti. Trova mysql-connector-java-5.1.23.jar o qualsiasi vecchio connettore che hai. Elimina questo vecchio connettore. Incolla nel nuovo connettore.

  3. Fare clic sulla scheda Progetti. Vai alla cartella Librerie. Elimina il vecchio connettore mysql. Fare clic con il tasto destro sulla cartella Librerie. Seleziona Aggiungi barattolo / cartella. Passa alla posizione in cui hai inserito il nuovo connettore e seleziona Apri.

  4. Nella scheda Progetto, fai clic con il pulsante destro del mouse sul progetto. Seleziona Risolvi origini dati nella parte inferiore del menu popup. Fare clic su Aggiungi connessione. A questo punto NetBeans salta in avanti e presuppone che si desideri utilizzare il vecchio connettore. Fare clic sul pulsante Indietro per tornare alla finestra ignorata. Rimuovere il vecchio connettore e aggiungere il nuovo connettore. Fare clic su Avanti e Test connessione per assicurarsi che funzioni.

Per avere un riferimento video, ho trovato questo per essere utile. Per IntelliJ IDEA, ho trovato questo per essere utile.


Mi rendo conto che la mia risposta non è del tutto pertinente. Ho pubblicato la mia risposta NetBeans qui perché la mia domanda è contrassegnata come un duplicato di questa domanda.
Jack J

4

Ho fatto esattamente lo stesso problema usando la dipendenza di seguito:

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

Passo solo alla versione 46 e tutto funziona.


3

Penso che sia meglio aggiornare il pacchetto lib "mysql-connector", così il database può essere ancora più sicuro.

Sto usando mysql della versione 8.0.12. Quando ho aggiornato mysql-connector-java alla versione 8.0.11, il problema era scomparso.


2

Se puoi aggiornare il tuo connettore a una versione che supporti il ​​nuovo plugin di autenticazione di MySQL 8, fallo. Se per qualche motivo questa non è un'opzione, cambia il metodo di autenticazione predefinito dell'utente del database in nativo.


0

rimuovere il file .jar di connessione se è stato aggiunto il file jar del connettore a più versioni aggiungere solo il file jar del connettore che corrisponde alla versione sql.


0

Un'altra causa potrebbe essere il fatto che stai indicando la porta sbagliata.

Assicurati di puntare effettivamente al server SQL corretto. Potresti avere un'installazione predefinita di MySQL in esecuzione su 3306, ma potresti effettivamente aver bisogno di un'istanza MySQL diversa.

Controlla le porte ed esegui alcune query sul db.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.