Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-01 17:20:02
original
722 Les gens l'ont consulté

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
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal