DBeaver连接MySQL时提示“Public Key Retrieval is not allowed”,通常发生在启用`caching_sha2_password`认证插件(MySQL 8.0+默认)且用户密码需通过RSA公钥加密传输时。DBeaver默认禁用公钥获取,导致认证失败。**解决方法**:在DBeaver连接配置的【Driver Properties】中,将`allowPublicKeyRetrieval`设为`true`(同时建议将`useSSL`设为`false`或配置有效SSL证书,避免混合安全风险)。若仍报错,可临时改用`mysql_native_password`认证:执行 `ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;`。注意:生产环境优先启用SSL并保持`allowPublicKeyRetrieval=false`,仅在内网可信环境开启该参数,避免中间人攻击风险。
1条回答 默认 最新
羽漾月辰 2026-03-25 18:15关注```html一、现象层:错误表征与典型日志
当使用 DBeaver(v21.3+)连接 MySQL 8.0.22 或更高版本时,控制台抛出明确异常:
SQLException: Public Key Retrieval is not allowed该错误非网络或权限缺失所致,而是 JDBC 驱动在握手阶段检测到服务端要求 RSA 公钥加密密码传输(
caching_sha2_password插件启用),但客户端未授权公钥获取流程。二、机制层:MySQL 8.0 认证协议演进与安全权衡
- 旧协议(5.7–):依赖
mysql_native_password,明文/简单哈希交换,无公钥协商 - 新默认(8.0+):启用
caching_sha2_password,支持 RSA 加密密码传输(防中间人窃听明文密码) - 关键约束:JDBC 驱动必须显式启用
allowPublicKeyRetrieval=true才能向服务端请求公钥;否则拒绝继续认证
三、配置层:DBeaver 驱动属性精准调优
在连接编辑器中进入【Driver Properties】页,需调整以下核心参数:
属性名 推荐值 安全说明 allowPublicKeyRetrievaltrue仅限内网可信环境;生产环境应禁用 useSSLfalse(开发)或true(配有效证书)若设 false且allowPublicKeyRetrieval=true,将导致明文密码经非加密通道传输,形成严重安全降级四、兼容层:服务端认证插件降级方案(临时应急)
若无法立即配置 SSL 或审计策略禁止开启公钥获取,可执行服务端指令重置用户认证方式:
ALTER USER 'dev_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass!2024'; FLUSH PRIVILEGES;⚠️ 注意:此操作绕过 RSA 加密保护,仅建议用于离线测试库或隔离开发环境,不可用于任何含敏感数据的系统。
五、架构层:生产环境安全加固路径图
graph LR A[MySQL 8.0+] --> B{是否启用 TLS?} B -- 是 --> C[配置有效证书
set useSSL=true
requireSecureTransport=ON] B -- 否 --> D[禁用 allowPublicKeyRetrieval
强制使用 TLS 通道加密] C --> E[保持 caching_sha2_password
兼顾性能与安全] D --> F[拒绝非加密连接
通过 network_security_policy 策略拦截]六、验证层:多维度连通性确认清单
- 检查 MySQL 服务端变量:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user'; - 确认 DBeaver 使用的 JDBC 驱动版本 ≥ 8.0.28(旧版存在 RSA 公钥缓存 Bug)
- 抓包验证:Wireshark 过滤
tcp.port == 3306,观察 Client Key Exchange 是否出现 - 日志审计:MySQL error log 中搜索
Authentication plugin 'caching_sha2_password' reported error
七、演进层:面向未来的替代方案思考
随着零信任架构普及,更优实践正逐步替代传统公钥检索模式:
- 采用
sha256_password+ 客户端证书双向认证(X.509) - 集成 Vault 或 Keycloak 实现动态凭据分发,规避静态密码存储
- DBeaver 24.0+ 已实验性支持 OAuth2.0 接入 MySQL HeatWave Service
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 旧协议(5.7–):依赖