问题:
在使用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连接字符串选项