Public Key Retrieval is not allowed
阿新 • • 發佈:2022-05-29
根據前面的分析,導致“Public Key Retrieval is not allowed”主要是由於當禁用 SSL/TLS 協議傳輸後,客戶端會使用伺服器的公鑰進行傳輸,預設情況下客戶端不會主動去找伺服器拿公鑰,此時就會出現上述錯誤。
經過查閱官方文件,出現 Public Key Retrieval 的場景可以概括為在禁用 SSL/TLS 協議傳輸切當前使用者在伺服器端沒有登入快取的情況下,客戶端沒有辦法拿到伺服器的公鑰。具體的場景如下:
- 新建資料庫使用者,首次登入;
- 資料庫的使用者名稱、密碼發生改變後登入;
- 伺服器端呼叫 FLUSH PRIVELEGES 指令重新整理伺服器快取。
針對上述錯誤,有如下的解決方案:
- 在條件允許的情況下,不要禁用 SSL/TLS 協議,即不要在 CLI 客戶端使用--ssl-mode=disabled,或在 JDBC 連線串中加入 useSSL=false;
- 如果必須禁用 SSL/TLS 協議,則可以嘗試使用 CLI 客戶端登入一次 MySQL 資料庫製造登入快取;
- 如果必須禁用 SSL/TLS 協議,則可以通過增加如下引數允許客戶端獲得伺服器的公鑰:
- 在 JDBC 連線串中加入 allowPublicKeyRetrieval=true 引數;
- 在 CLI 客戶端連線時加入--get-server-public-key 引數;
- 在 CLI 客戶端連線時加入--server-public-key-path=file_name 引數,指定存放在本地的公鑰檔案。