DBeaver默认加密保存连接密码,credentials-config.json中存储的是AES-128-CBC或AES-256-CBC加密后的Base64字符串,依赖主密码或系统密钥环解密;明文存储极不安全且受严格限制。

DBeaver 默认就加密保存连接密码,不需要额外设置 —— 但“怎么加密”和“怎么让它真正安全”,是两回事。
credentials-config.json 里存的到底是什么?
你打开 credentials-config.json 文件,会看到类似这样的字段:
"configuration": {
"password": "U2FsdGVkX1+..."
}
那个长字符串不是明文,也不是简单 Base64 编码,而是 AES 加密后的结果(DBeaver 6.1.3+ 默认用 AES-128-CBC 或 AES-256-CBC,取决于主密钥类型)。它必须配合主密码(Master Password)或操作系统密钥环(如 Windows Credential Manager)才能解密。
- 如果你从没设过主密码,DBeaver 会退而使用系统凭证服务自动保护 —— 这意味着换台电脑、换个用户登录,就打不开
- 如果启用了主密码,所有加密凭据都依赖它;输错一次,
credentials-config.json就彻底无法还原 -
connections.json里永远只存占位符(如{encrypted}),别指望在那里翻出密码
勾选“保存密码”时,实际发生了什么?
当你在新建/编辑连接时勾选 Save password,DBeaver 并不会把密码明文写进任何 JSON 文件。它会:
- 把密码传给凭证管理模块(
org.jkiss.dbeaver.model.auth) - 根据当前环境选择加密路径:有主密码 → 用主密码派生密钥;无主密码 → 委托系统密钥环(Keyring / Credential Manager / Keychain)
- 最终只把加密结果写入
credentials-config.json,且该文件本身不包含密钥或 IV
所以,“保存密码” ≠ “可迁移密码”。复制这个文件到另一台机器,大概率无法解密。
为什么不能禁用加密,改用明文存储?
理论上可以:在 Preferences → Connections → Connection settings 中勾选 Store passwords in plain text,但这是危险操作,且仅在未启用主密码时生效。
- 一旦勾选,密码会以明文形式写入
credentials-config.json—— 文件权限失控、Git 误提交、云同步泄露,风险立刻放大 - DBeaver 会在 UI 上加红色警告:“This is highly insecure and not recommended for production use”
- 该选项在启用主密码后自动灰显,无法开启
- 即使开了,也只影响新保存的连接;旧连接仍走加密流程,不会自动转明文
真正可控的安全策略只有两条路
一是信任 DBeaver 的默认机制:靠系统级凭证服务保护,不导出、不共享、不备份 credentials-config.json 单独文件;二是主动启用主密码 —— 它不是“多一道密码”,而是把所有凭据绑定到一个强口令上,迁移到新设备时,只要记得主密码 + 把整个 .dbeaver 目录复制过去,就能复原。
最容易被忽略的一点:主密码一旦设定,就无法通过 UI 修改或重置;忘记它,等于永久丢失所有已加密连接的密码 —— 没有后门,没有恢复密钥,DBeaver 不留退路。











