recuperar - Conexión Java-MySql: no se permite la recuperación de clave pública
mostrar imagen en jsp desde mysql (7)
Como alternativa a las respuestas sugeridas, puede probar y usar el complemento de autenticación mysql_native_password en lugar del complemento de autenticación caching_sha2_password .
ALTER USER ''root''@''localhost'' IDENTIFIED WITH mysql_native_password BY ''your_password_here'';
Intento conectar la base de datos MySql con Java utilizando el conector 8.0.11. Todo parece estar bien pero tengo esta excepción:
Excepción en el subproceso "main" java.sql.SQLNonTransientConnectionException: no se permite la recuperación de clave pública
Es mi primera vez con MySql y no pude encontrar ninguna solución. ¡Gracias por tu ayuda!
Traza de la pila:
Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at
com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8)
Administrador de conectores:
public class ConnectionManager {
public static final String serverTimeZone = "UTC";
public static final String serverName = "localhost";
public static final String databaseName ="biblioteka";
public static final int portNumber = 3306;
public static final String user = "anyroot";
public static final String password = "anyroot";
public static Connection getConnection() throws SQLException {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUseSSL( false );
dataSource.setServerTimezone( serverTimeZone );
dataSource.setServerName( serverName );
dataSource.setDatabaseName( databaseName );
dataSource.setPortNumber( portNumber );
dataSource.setUser( user );
dataSource.setPassword( password );
return dataSource.getConnection();
}
}
Debe agregar la opción de cliente a su conector mysql allowPublicKeyRetrieval=true
https://mysql-net.github.io/MySqlConnector/connection-options/
podría ayudar también añadiendo useSSL=false
El error anterior en mi caso se debió en realidad al nombre de usuario y contraseña incorrectos. Solución del problema: 1. Vaya a la línea DriverManager.getConnection ("jdbc: mysql: // localhost: 3306 /? UseSSL = false", "username", "password"); Los campos nombre de usuario y contraseña pueden estar equivocados. Ingrese el nombre de usuario y la contraseña que usa para iniciar su cliente mysql. El nombre de usuario es generalmente root y la contraseña es la cadena que se ingresa cuando aparece una pantalla similar a esta. Pantalla de inicio de mysql
Nota: el nombre de puerto 3306 puede ser diferente en su caso.
En mi caso fue error del usuario. Estaba usando el usuario root
con una contraseña inválida. No estoy seguro de por qué no recibí un error de autenticación, sino que recibí este mensaje críptico.
Esta solución funcionó para MacOS Sierra y ejecutó MySQL versión 8.0.11. Asegúrese de que el controlador que ha agregado en su ruta de compilación - "agregar tarro externo" debe coincidir con la versión de SQL.
String url = "jdbc:mysql://localhost:3306/syscharacterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
Resuelvo este problema utilizando la siguiente configuración en el marco de arranque Spring
spring.datasource.url=jdbc:mysql://localhost:3306/db-name?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
Usar jdbc url
como:
jdbc:mysql://localhost:3306/Database_dbName?allowPublicKeyRetrieval=true&useSSL=false;
PortNo: 3306
puede ser diferente en su configuración