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 サイトの他の関連記事を参照してください。