Erreur de connexion MySQL : "La récupération de clé publique n'est pas autorisée"
Lors de la tentative de connexion à une base de données MySQL à l'aide du connecteur MySQL 8.0 de Java. 11, vous pouvez rencontrer l'exception suivante :
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
Cette erreur indique que le client tente de récupérer la clé publique du serveur, mais que la connexion n'a pas été configurée pour l'autoriser.
Résolution
Pour résoudre le problème, vous devez ajouter l'option clientallowPublicKeyRetrieval=true à votre chaîne de connexion. Cela permettra au client de demander automatiquement la clé publique au serveur. Cependant, il est important de noter que définir cette option sur true pourrait permettre à un proxy malveillant d'effectuer une attaque MITM pour obtenir le mot de passe en texte brut.
Exemple de gestionnaire de connexions avec AllowPublicKeyRetrieval
L'extrait de code suivant met à jour la méthode getConnection dans votre classe ConnectionManager pour inclure l'option allowPublicKeyRetrieval :
<code class="java">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); dataSource.setAllowPublicKeyRetrieval(true); // Allow public key retrieval return dataSource.getConnection(); }</code>
Remarque supplémentaire
À des fins de test ou de développement, vous pouvez envisagez également de désactiver SSL en définissant useSSL=false, comme suggéré dans la solution fournie :
<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!