Maison  >  Article  >  base de données  >  Pourquoi est-ce que je reçois l'erreur « La récupération de clé publique n'est pas autorisée » lors de la connexion à MySQL avec Java ?

Pourquoi est-ce que je reçois l'erreur « La récupération de clé publique n'est pas autorisée » lors de la connexion à MySQL avec Java ?

DDD
DDDoriginal
2024-11-01 17:20:02610parcourir

Why am I getting the

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn