ホームページ  >  記事  >  データベース  >  Java を使用して MySQL に接続すると「公開キーの取得は許可されていません」というエラーが表示されるのはなぜですか?

Java を使用して MySQL に接続すると「公開キーの取得は許可されていません」というエラーが表示されるのはなぜですか?

DDD
DDDオリジナル
2024-11-01 17:20:02610ブラウズ

Why am I getting the

MySQL 接続エラー: 「公開キーの取得は許可されていません」

Java の MySQL Connector 8.0 を使用して MySQL データベースに接続しようとしたとき。 11 では、次の例外が発生する場合があります:

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

このエラーは、クライアントがサーバーから公開キーを取得しようとしているが、それを許可するように接続が構成されていないことを示します。

解決策

この問題を解決するには、allowPublicKeyRetrieval=true クライアント オプションを接続文字列に追加する必要があります。これにより、クライアントはサーバーに公開キーを自動的に要求できるようになります。ただし、このオプションを true に設定すると、悪意のあるプロキシが MITM 攻撃を実行して平文のパスワードを取得できる可能性があることに注意することが重要です。

AllowPublicKeyRetrieval を使用した接続マネージャーの例

次のコード スニペットは、ConnectionManager クラスの getConnection メソッドを更新して、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>

追加メモ

テストまたは開発の目的で、提供されている解決策で提案されているように、useSSL=false を設定して SSL を無効にすることも検討してください:

<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>

以上がJava を使用して MySQL に接続すると「公開キーの取得は許可されていません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。