問題:
在使用MyBatis時,啟動報出該異常com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
解決:
是在 jdbc url后添加allowPublicKeyRetrieval=true,比如:jdbc:mysql://localhost:3306/test?characterEncoding=utf8&allowPublicKeyRetrieval=true
原因:
在MySQL8.0中,caching_sha2_password是默認的身份驗證插件,如果用戶帳戶使用sha256_password身份驗證,則在傳輸過程中必須保護密碼。TLS是實現此目的的首選機制,但是如果不可用,則將使用RSA公鑰加密。要指定服務器的RSA公鑰,請使用ServerRSAPublicKeyFile連接字符串設置,或設置AllowPublicKeyRetrieval=True為允許客戶端自動從服務器請求公鑰。請注意,這AllowPublicKeyRetrieval=True 可能會允許惡意代理執行MITM攻擊以獲取純文本密碼,因此False默認情況下它必須被顯式啟用。所以MySQL5.x版本是沒有問題的。
有圖有真相:MySQL連接字符串選項