加 allowPublicKeyRetrieval=true 可解决公钥检索错误,但需客户端驱动 ≥ 8.0.9、MySQL 未强制 SSL、且已配置 RSA 密钥对,三者缺一不可。
直接加 allowpublickeyretrieval=true 通常能解决,但前提是客户端驱动版本 ≥ 8.0.9;否则参数被忽略,错误照旧。
Navicat 高级设置里怎么填 allowPublicKeyRetrieval=true
在 Navicat 新建或编辑 MySQL 连接时,进入「高级」选项卡 → 找到「额外连接参数」字段(有些版本叫「初始命令」下方的空白输入框)→ 粘贴:allowPublicKeyRetrieval=true&useSSL=false
-
allowPublicKeyRetrieval=true必须完整写出,不能缩写成allowpublickeyretrieval=true(大小写敏感) -
useSSL=false要一起加,尤其服务端没配 SSL 时;否则旧版 Navicat(如 12.0.x)会先尝试 SSL 握手失败,再跳转公钥流程,最终仍报错 - 参数之间用英文
&连接,不是&、空格或逗号
为什么加了参数还是报 Public Key Retrieval is not allowed
大概率是 Navicat 内置 JDBC 驱动太老,不识别该参数。MySQL 官方从 mysql-connector-java 8.0.9 开始才正式支持 allowPublicKeyRetrieval。
- Navicat Premium 12.0.18 或更早版本:内置驱动多为 5.1.x 或 6.0.x,加了也无效
- Navicat 15/16 默认带 8.0+ 驱动,但如果手动替换了旧版
mysql-connector-java-5.1.47.jar,就会回退失效 - 错误堆栈里出现
ClassNotFoundException或Unsupported major.minor version,说明驱动与 Java 版本不匹配,参数自然不生效
不改参数也能连?得满足这三个硬条件
allowPublicKeyRetrieval=true 只在非 SSL 场景下起作用,以下情况即使参数正确也连不上:
- MySQL 配置了
require_secure_transport=ON,强制走 SSL,allowPublicKeyRetrieval被忽略 - 用户用了
caching_sha2_password,但服务端没生成 RSA 密钥对(sha2_password_private_key_path和sha2_password_public_key_path未配置或路径不可读),客户端发请求后收不到公钥,超时失败 - 防火墙或云厂商安全组拦截了 3306 端口,连接根本没发到 MySQL,错误表现容易被误判为认证问题
真正要稳,得盯住三处:Navicat 驱动版本、MySQL 的 SSL 强制策略、RSA 密钥对是否就位——少一个,allowPublicKeyRetrieval=true 就只是个摆设。


















