如何设置Mysql allowPublicKeyRetrieval参数

如何设置mysql参数allowPublicKeyRetrieval=true

MySQL 8.0 默认的身份验证插件变更有关。

  1. 更安全的认证方式 :从 MySQL 8.0 开始,默认的身份验证插件从 mysql_native_password 变更为 caching_sha2_password 。后者是一种更安全的认证机制,它在传输密码时采用了更强的 SHA-256 加密。
  2. 公钥交换的需求 :为了完成这种加密认证,客户端需要从服务器获取一个 RSA 公钥来加密密码。如果客户端本地没有缓存这个公钥,它就需要向服务器请求。
  3. 默认的安全限制 :出于安全考虑,JDBC 驱动默认不允许客户端自动从服务器获取公钥(即 allowPublicKeyRetrieval 默认为 false )。这是为了防止潜在的中间人攻击(MITM),因为一个恶意的代理可能会伪装成服务器,向客户端提供自己的公钥,从而窃取密码明文。

因此,当客户端在未建立 SSL 加密连接的情况下,尝试使用 caching_sha2_password 进行认证,且本地没有服务器公钥时,就会因为无法获取公钥而连接失败,并抛出 Public Key Retrieval is not allowed 异常。