learning_record_doc/数据库/mysql/Java-MySQL.md

1.7 KiB
Raw Blame History

JAVA-MySQL

mysql8.x版本的数据库在连接的时候报错 java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

说明

官方doc

image-20230101223712667

原文:

If the user account uses sha256_password authentication, the password must be protected during transmission; TLS is the preferred mechanism for this, but if it is not available then RSA public key encryption will be used. To specify the servers RSA public key, use the ServerRSAPublicKeyFile connection string setting, or set AllowPublicKeyRetrieval=True to allow the client to automatically request the public key from the server. Note that AllowPublicKeyRetrieval=True could allow a malicious proxy to perform a MITM attack to get the plaintext password, so it is False by default and must be explicitly enabled.

翻译

如果用户账号使用sha256_password认证密码在传输过程中必须进行保护 TLS 是对此的首选机制,但如果它不可用,则将使用 RSA 公钥加密。要指定服务器的 RSA 公钥,请使用 ServerRSAPublicKeyFile 连接字符串设置,或设置 AllowPublicKeyRetrieval=True 以允许客户端自动从服务器请求公钥。请注意AllowPublicKeyRetrieval=True 可能允许恶意代理执行 MITM 攻击以获取明文密码,因此默认情况下为 False必须明确启用。

解决方法

只要在url的后边加上allowPublicKeyRetrieval=true即可

url: jdbc:mysql://10.8.0.18:3306/newerp?serverTimezone=UTC&useUnicode=true&charaterEncoding=utf8&autoReconnect=true&useAffectedRows=true