MySQL 連線錯誤:「不允許公鑰擷取」
嘗試使用 Java 的 MySQL Connector 8.0 連線到 MySQL 資料庫時。 11、您可能會遇到以下異常:
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
此錯誤表示客戶端正在嘗試從伺服器檢索公鑰,但連線尚未配置為允許這樣做。
解決方案
要解決此問題,您需要將allowPublicKeyRetrieval=true 用戶端選項新增至連線字串中。這將允許客戶端自動從伺服器請求公鑰。但是,請務必注意,將此選項設為 true 可能會允許惡意代理執行 MITM 攻擊以取得明文密碼。
具有AllowPublicKeyRetrieval 的範例連線管理員
以下程式碼片段更新ConnectionManager 類別中的get 方法以包含allowedPublicKey
<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>
<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>
🎜>附加說明出於測試或開發目的,您可以還可以考慮透過設定useSSL=false 來停用SSL,如提供的解決方案中所建議的:
以上是使用 Java 連接 MySQL 時,為什麼會出現「不允許公鑰檢索」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!