MySQL

如何解决CloudBeaver连接MySQL 8数据库时报错:Error connecting to database: Public Key Retrieval is not allowed

零 故障现象

公司内部部署了一套CloudBeaver CE Server的管理数据库的Web端开源工具,其版本是25.2.5.202511171057。在配置数据库连接或使用该工具来管理数据库的过程中,经常碰到下述错误:

该错误有时候又不会出现。挺恼人的,如何解决呢?

二 故障分析

1 我把下述问题抛给Gemini

 通过clouddbeaver部署的数据库管理工具,在配置数据库连接时碰到下述错误:

Error connecting to database: Connection failed: Public Key Retrieval is not allowed

我确定的是数据库的用户名和密码,没有写错。

2 Gemini给出的排查方向

这个问题在通过 CloudBeaver(或 DBeaver)连接 MySQL 8.0+ 数据库时非常经典。

简单来说,这通常不是因为你的用户名或密码不对,而是因为 MySQL 8.0 默认使用了更安全的身份验证插件(caching_sha2_password),它要求客户端在传输密码时使用 RSA 公钥加密

如果连接没有使用 SSL(加密连接),而驱动程序又没被明确允许从服务器“抓取”这个公钥,连接就会被拦截。


解决方案:修改驱动属性

你不需要修改数据库账号,只需要在 CloudBeaver 的连接配置中调整一个参数。

步骤 1:打开连接编辑界面

在 CloudBeaver 中,找到你报错的那个连接,进入 Edit Connection(编辑连接)

步骤 2:切换到“驱动属性”标签页

点击配置界面中的 Driver Properties(驱动属性) 选项卡。

步骤 3:修改以下两个关键参数

在属性列表中找到(或手动添加)以下两个参数,并将其值改为 true

参数名设置值说明
allowPublicKeyRetrievaltrue核心设置:允许驱动从服务器请求公钥。
useSSLfalse如果你没有配置 SSL 证书,将其设为 false 可以避免由于 SSL 握手失败导致的干扰。

步骤 4:保存并重连

点击 Save,然后再次点击 Test Connection。此时应该就能顺利连接了。

 


3 为什么会发生这种情况?

由于安全策略,MySQL 不希望在不安全的连接中通过明文传输某些认证信息。

  • 如果不启用 SSL:驱动程序必须先向数据库要一个“公钥”,然后用公钥加密密码发给数据库。
  • 默认限制:出于安全考虑,驱动程序默认不被允许自动“索要”这个公钥,以防止伪造服务器攻击。通过设置 allowPublicKeyRetrieval=true,你告诉驱动:“没关系,我相信这个服务器,去拿公钥吧。”

安全提示:如果是在生产环境,最专业的做法是配置好 SSL 证书,这样就不需要开启这个权限了。但在开发或内部环境,上述方案是最快最有效的。

三 尝试解决并验证

 

四 复盘小结

自己之前在配置CloudBeaver连接到MySQL 8版本的数据库时,遇到该错误好几次,老是怀疑哪儿配置错误了:

  1. 数据库IP地址写错了吗?前有有没有多余的空格?
  2. 端口写对了吗?
  3. 数据库用户名、密码写对了吗?
  4. 是不是数据库连接字符串别名写的不对?

导致问题出现的。于是,反反复复弄了好久,后面尝试删除数据库连接,重新配置,有时候又莫名其妙的正常了。问题就不了了之了,今天,恰好有同事反馈说通过该Web工具连接数据库时报错了,我一看和我之前遇到的错误是一样的。就有点儿坐不住了,这个数据库连接肯定是我之前配置成功的,并且可以正常访问数据库的。那么问题究竟出现在哪儿呢?直接去问了Gemini,AI给出了一个排查解决问题的方向,看来是对的。

 

留言