在使用 MySQL 8.0 時重啓應用後提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: mysql
Public Key Retrieval is not allowedgit
最簡單的解決方法是在鏈接後面添加 allowPublicKeyRetrieval=truegithub
即:jdbc:mysql://localhost:3306/netmarketdb?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=truesql
(爲何要加useSSL=false呢?緣由是MySQL在高版本須要指明是否進行SSL鏈接。解決方案就是在mysql鏈接字符串url中加入ssl=true或者false便可)服務器
文檔中(https://mysql-net.github.io/MySqlConnector/connection-options/)給出的解釋是:url
若是用戶使用了 sha256_password 認證,密碼在傳輸過程當中必須使用 TLS 協議保護,可是若是 RSA 公鑰不可用,能夠使用服務器提供的公鑰;能夠在鏈接中經過 ServerRSAPublicKeyFile 指定服務器的 RSA 公鑰,或者AllowPublicKeyRetrieval=True參數以容許客戶端從服務器獲取公鑰;可是須要注意的是 AllowPublicKeyRetrieval=True可能會致使惡意的代理經過中間人攻擊(MITM)獲取到明文密碼,因此默認是關閉的,必須顯式開啓spa
爲何要加useSSL=false呢?代理
緣由是MySQL在高版本須要指明是否進行SSL鏈接。解決方案就是在mysql鏈接字符串url中加入ssl=true或者false便可server