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.

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


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í


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.


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


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.


¡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)


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.


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

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)


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;

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.


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.


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ó.


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.