Cómo resolver el problema de No se puede cargar el complemento de autenticación 'caching_sha2_password'

109

En eclipse, cuando comencé mi aplicación, obtuve esto: no pude descubrir el dialecto a usar. java.sql.SQLException: no se puede cargar el complemento de autenticación 'caching_sha2_password'.

en java.sql.SQLException: no se puede cargar el complemento de autenticación 'caching_sha2_password'. at en com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) en com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) en com.mysql.jdbc.WceysedHluands. java: 1746) en com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) en com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) en com.mysql.jdbc.ConnectionImpl. connectOneTryOnly (ConnectionImpl.java:2222) en com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) en com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) en com.mysql.jdbc .JDBC4Connection. (JDBC4Connection.java:47) en sun.reflect.NativeConstructorAccessorImpl.

Sarath Mohan
fuente

Respuestas:

167

A partir de MySQL 8.0.4, han cambiado el complemento de autenticación predeterminado para el servidor MySQL de mysql_native_password a caching_sha2_password .

Puede ejecutar el siguiente comando para resolver el problema.

ejemplo de nombre de usuario / contraseña => estudiante / pass123

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

Consulte la página oficial para obtener más detalles: Manual de referencia de MySQL

Gaurav
fuente
8
Aunque esto funciona, es mejor actualizar la versión MySQL Connector / J (como sugieren algunas de las otras respuestas) ya que le permite usar el complemento de autenticación sha2_caching más seguro.
Mark Rotteveel
@MarkRotteveel ¡Sí! Yo también estoy de acuerdo en eso.
Gaurav
@MarkRotteveel ¿cómo?
theonlygusti
4
@theonlygusti Necesita actualizar MySQL Connector / J al menos a 5.1.46, o mejor, a 8.0.14.
Mark Rotteveel
@MarkRotteveel ¿cómo hago eso? stackoverflow.com/questions/54413365/…
theonlygusti
66

Otros han señalado el problema de la raíz, pero en mi caso estaba usando dbeaver e inicialmente cuando configuré la conexión mysql con dbeaver estaba seleccionando el controlador mysql incorrecto (crédito aquí para la respuesta: https://github.com/dbeaver/dbeaver/ issues / 4691 # issuecomment-442173584 )

Al seleccionar la opción MySQL en la siguiente figura, se producirá el error mencionado, ya que el controlador es mysql 4+, que se puede ver en la sugerencia de información de la base de datos.


Para este error, la selección de la opción superior mysql 4+ en esta figura dará el error mencionado en esta pregunta


En lugar de seleccionar el controlador MySQL, seleccione el controlador MySQL 8+, que se muestra en la siguiente figura.


ingrese la descripción de la imagen aquí

Paul
fuente
6
Gracias, este era exactamente mi problema. ¿Recibió otro error: "No se permite la recuperación de clave pública"?
Tomáš Zato - Reincorpora a Monica
Interesante, no después de lo anterior, dbeaver cargó las tablas.
Paul
4
GRACIAS. Esto me ayudó mucho. Para aquellos que todavía están recibiendo el error "No se permite la recuperación pública de Ket" en DBeaver, encontré un enlace que resuelve esto aquí .
jpisty
3
Public key retrieval is not allowed
aderchox
43

Actualice su paquete lib mysql-connector "con su versión mysql como a continuación estoy usando la versión 8.0.13 y en pom cambié la versión:

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

Mi problema se ha resuelto después de esto.

alok
fuente
1
Gracias por la útil respuesta. Para otros, para encontrar la última versión, utilice este enlace; mvnrepository.com/artifact/mysql/mysql-connector-java
Yusuf
31

Puede que esté utilizando un mysql_connector incorrecto.

Utilice el conector de la misma versión de mysql

Vishal Boinapalli
fuente
16

Recibí este error en una aplicación Spring Boot, pero no en otra. Finalmente, encontré que la versión de Spring Boot en la que no funcionaba era 2.0.0.RELEASE y la que estaba funcionando era 2.0.1.RELEASE. Eso llevó a una diferencia en el conector MySQL: 5.1.45 frente a 5.1.46. Actualicé la versión de Spring Boot para la aplicación que arrojaba este error al inicio y ahora funciona.

Greg Charles
fuente
¡Esto me ayudó!
Anand Varkey Philips
¡Trabajó para mi! Estaba usando la versión 1.5.8.RELEASE.
Ionuț Ciuta
15

Solo necesita eliminar su conector anterior y descargar la nueva versión (mysql-connector-java-5.1.46)

Turab
fuente
Funcionó. Perdí casi 2 días encontrando esta solución. Gracias.
Hemant Nagpal
11

Estoy usando mysql 8.0.12 y la actualización del conector mysql a mysql-connector-java-8.0.12 resolvió el problema por mí.

Espero que ayude a alguien.

Santosh Gatlewar
fuente
Actualice a al menos 5.1.46 o la última versión como hoy tenemos 8.0.18. Esto ayudará a resolver el problema.
Atul
9

Como se mencionó en repilies anteriores:

A partir de MySQL 8.0.4, el equipo de MySQL cambió el complemento de autenticación predeterminado para el servidor MySQL de mysql_native_password a caching_sha2_password.

Entonces, hay tres formas de resolver este 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';
CORRIENTE CONTINUA-
fuente
8

Estos podrían ser sus conectores para MySQL que deben actualizarse, ya que MySQL8 cambió el cifrado de las contraseñas, por lo que los conectores más antiguos las cifran incorrectamente.

El repositorio de maven para el conector java se puede encontrar aquí .
Si usa el complemento Flyway , ¡también debería considerar actualizarlo !

Entonces simplemente puede actualizar su maven pom con:

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

O para otros que usan Gradle , puede actualizar 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')
    }
 }

Todo lo que realmente necesitas hacer (ejemplo de build.gradle)

KeaganFouche
fuente
5

Tiene problemas con la nueva versión de MySQL que venía con el complemento "caching_sha2_password", siga el siguiente comando para resolverlo.

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

O simplemente puede usar el siguiente comando para mantener sus privilegios como están:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

fuente
Hola, ¿qué quieres decir con "your_db_name. *" En la tercera línea, qué representa eso *?
Sarath Mohan
El nombre de la base de datos donde se supone que el usuario tiene acceso. o simplemente puede usar solo la última instrucción ALTER que también resolverá su problema. En ALTER solo necesita pasar su nombre de usuario, eso es todo
OTORGAR TODOS LOS PRIVILEGIOS EN your_db_name. * TO 'your_user_name' @ '%' identificado por 'your_user_password';
Sarath Mohan
De acuerdo, está enfrentando el problema mientras se conecta a DB, ¿verdad? Significa que también está especificando algún nombre de base de datos en una cadena de conexión, es necesario agregar la misma base de datos en lugar de your_db_name. Espero que lo
4

Me encontré con este problema en NetBeans cuando trabajaba con un proyecto ya hecho de este libro JSP de Murach . El problema fue causado por el uso del conector 5.1.23 J con una base de datos MySQL 8.0.13. Necesitaba reemplazar el controlador antiguo por uno nuevo. Después de descargar el Conector J, esto tomó tres pasos.

Cómo reemplazar el conector J del proyecto NetBeans:

  1. Descargue el Conector J actual desde aquí . Luego cópielo en su sistema operativo.

  2. En NetBeans, haga clic en la pestaña Archivos que está al lado de la pestaña Proyectos. Busque mysql-connector-java-5.1.23.jar o cualquier conector antiguo que tenga. Elimina este conector antiguo. Pegue el nuevo conector.

  3. Haga clic en la pestaña Proyectos. Navegue hasta la carpeta Bibliotecas. Elimina el antiguo conector mysql. Haga clic derecho en la carpeta Bibliotecas. Seleccione Agregar tarro / carpeta. Navegue hasta la ubicación donde colocó el nuevo conector y seleccione abrir.

  4. En la pestaña Proyecto, haga clic con el botón derecho en el proyecto. Seleccione Resolver fuentes de datos en la parte inferior del menú emergente. Haga clic en Agregar conexión. En este punto, NetBeans avanza y asume que desea utilizar el conector antiguo. Haga clic en el botón Atrás para volver a la ventana omitida. Quite el conector antiguo y agregue el conector nuevo. Haga clic en Siguiente y Probar conexión para asegurarse de que funcione.

Para referencia de video, encontré que esto es útil. Para IntelliJ IDEA, encontré que esto es útil.

Jack J
fuente
Me doy cuenta de que mi respuesta no es del todo relevante. Publiqué mi respuesta de NetBeans aquí porque mi propia pregunta está marcada como un duplicado de esta pregunta.
Jack J
4

Hice exactamente el mismo problema usando la dependencia a continuación:

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

Acabo de cambiar a la versión 46 y todo funciona.

José Junior
fuente
3

Creo que es mejor actualizar su paquete lib "mysql-connector", para que la base de datos sea aún más segura.

Estoy usando mysql de la versión 8.0.12. Cuando actualicé mysql-connector-java a la versión 8.0.11, el problema desapareció.

Jack Ma
fuente
2

Si puede actualizar su conector a una versión que admita el nuevo complemento de autenticación de MySQL 8, hágalo. Si esa no es una opción por alguna razón, cambie el método de autenticación predeterminado de su usuario de base de datos a nativo.

DataVader
fuente
0

elimine el archivo .jar de conexión si agregó el archivo jar del conector de varias versiones, solo agregue el archivo jar del conector que coincida con su versión de SQL.

usuario10434384
fuente
0

Otra causa podría ser el hecho de que está apuntando al puerto incorrecto.

Asegúrese de estar apuntando al servidor SQL correcto. Es posible que tenga una instalación predeterminada de MySQL ejecutándose en 3306, pero es posible que en realidad necesite una instancia de MySQL diferente.

Verifique los puertos y ejecute alguna consulta en la base de datos.

Aquazi
fuente