影评周公子 2026-03-25 18:15 采纳率: 98.8%
浏览 1
已采纳

DBeaver连接MySQL时提示“Public Key Retrieval is not allowed”,如何解决?

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(配有效证书)若设 falseallowPublicKeyRetrieval=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 策略拦截]

    六、验证层:多维度连通性确认清单

    1. 检查 MySQL 服务端变量:SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
    2. 确认 DBeaver 使用的 JDBC 驱动版本 ≥ 8.0.28(旧版存在 RSA 公钥缓存 Bug)
    3. 抓包验证:Wireshark 过滤 tcp.port == 3306,观察 Client Key Exchange 是否出现
    4. 日志审计:MySQL error log 中搜索 Authentication plugin 'caching_sha2_password' reported error

    七、演进层:面向未来的替代方案思考

    随着零信任架构普及,更优实践正逐步替代传统公钥检索模式:

    • 采用 sha256_password + 客户端证书双向认证(X.509)
    • 集成 Vault 或 Keycloak 实现动态凭据分发,规避静态密码存储
    • DBeaver 24.0+ 已实验性支持 OAuth2.0 接入 MySQL HeatWave Service
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月26日
  • 创建了问题 3月25日