allowpublickeyretrieval是客户端jdbc驱动的安全控制参数,非mysql服务端配置;必须在dbeaver等客户端的驱动属性中显式设为true,并配合usessl=false(开发)或usessl=true+有效证书(生产)使用。

allowPublicKeyRetrieval 不是 MySQL 服务端的配置项,它完全由客户端(如 DBeaver 使用的 JDBC 驱动)控制。MySQL 本身没有「开启公钥检索」这个操作——它只会在使用 caching_sha2_password 插件且连接未启用 SSL 时,被动响应客户端对公钥的请求。
所以,你不能、也不应该在 MySQL 的 my.cnf 或 SQL 里执行类似 SET allowPublicKeyRetrieval = true 的命令。这类写法不存在,会报错 Unknown system variable。
为什么必须在 DBeaver 端设置 allowPublicKeyRetrieval=true
caching_sha2_password,该插件在非 SSL 连接下要求客户端先获取服务器 RSA 公钥,再加密密码发送。但 JDBC 驱动(如 MySQL Connector/J)出于安全默认禁止此行为,除非显式声明允许。DBeaver 就是通过 JDBC 驱动连接的,因此必须在它的驱动属性中放开限制。
DBeaver 中正确设置 allowPublicKeyRetrieval 的步骤
allowPublicKeyRetrieval,把值从 false 改为 true
- 若没看到该属性:点右上角 显示高级属性(Show advanced properties),或在搜索框输入 allowPublicKeyRetrieval
- (推荐同步设置)useSSL=false(开发环境),或 useSSL=true + 配置有效证书(生产环境)
- 点击 测试连接,成功后保存
容易被忽略的关键点
- 同一个 DBeaver 实例下,每个 MySQL 连接都要单独设置 —— 新建连接不会继承旧连接的驱动属性 - 修改后必须点 测试连接,而不是仅保存;部分版本缓存连接参数,不测试可能仍走旧配置 - 如果连接的是远程 MySQL,allowPublicKeyRetrieval=true 仅解决认证环节问题,不代表能连通:仍需确认 3306 端口可达、用户授权包含对应 host(如 'user'@'%' )、防火墙/安全组放行
- allowPublicKeyRetrieval=true 在明文连接(useSSL=false)下会降低安全性,它让攻击者有机会截获公钥并构造中间人攻击 —— 这不是 bug,是设计权衡,所以生产环境优先配 SSL,而非依赖此参数











