在使用jdbc連接到mysql時提示錯誤:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
原因如下(參考官網給出的連接選項):
如果用戶使用了 sha256_password 認證,密碼在傳輸過程中必須使用 TLS 協議保護,但是如果 RSA 公鑰不可用,可以使用服務器提供的公鑰;可以在連接中通過 ServerRSAPublicKeyFile 指定服務器的 RSA 公鑰,或者AllowPublicKeyRetrieval=True參數以允許客戶端從服務器獲取公鑰;但是需要注意的是 AllowPublicKeyRetrieval=True可能會導致惡意的代理通過中間人攻擊(MITM)獲取到明文密碼,所以默認是關閉的,必須顯式開啟。
所以可以用mysql_native_password,不要用sha256_password方式,就不會有問題了。
在驅動鏈dao接的后面添加參數allowPublicKeyRetrieval=true&useSSL=false
allowPublicKeyRetrieval=true&useSSL=false
,該參數放在最前面,其余參數放在后面。比如:
jdbc:mysql://localhost:3306/model?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
我的數據庫就是這樣,如果放在后面會報錯的,我也不明白為什么會這樣。
我沒有詳細的找原因,反正不出錯了就行了。
