在MySQL連接中出現“Public Key Retrieval is not allowed”錯誤,通常是因為在使用安全套接字層(SSL)連接時遇到了問題。這是因為MySQL 8.0及以上版本對安全性要求更高,特別是在使用密碼插件如caching_sha2_password
時,默認要求加密通信,并且不允許通過不安全的方式獲取服務器的公鑰。
解決這個問題的方法有以下幾種:
- 允許公鑰檢索:
在客戶端連接字符串或配置文件中設置allowPublicKeyRetrieval=true
。但請注意,這僅用于測試和臨時解決方案,因為它會降低連接的安全性。在生產環境中應避免此做法,而是確保正確配置了SSL。
String url = "jdbc:mysql://yourserver:3306/database?useSSL=true&allowPublicKeyRetrieval=true&serverTimezone=UTC";
-
啟用SSL并提供正確的信任證書:
- 在服務器端配置MySQL以支持SSL連接。
- 客戶端需要有與服務器匹配的CA證書,將其添加到客戶端的信任存儲中。
- 更新客戶端連接URL以包含SSL選項:
useSSL=true
并可能需要指定sslTrustStore
和sslTrustStorePassword
參數。
-
更改MySQL服務器上的用戶密碼插件:
如果你希望保持高安全性但又想簡化連接過程,可以將MySQL服務器上的用戶密碼插件改為mysql_native_password
。這樣,客戶端無需進行復雜的SSL配置即可連接,但這意味著放棄了新版本MySQL默認提供的更強密碼安全策略。
執行如下命令來更改用戶密碼插件:
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
請根據實際情況選擇合適的方法解決問題,并始終優先考慮生產環境中的數據安全性。