DBeaver不提供隐藏列开关,但可通过DB2ColumnMask实现视觉遮蔽;仅DB2、Oracle等商业数据库原生支持列级脱敏,MySQL/PG需SQL手动处理;规则需配置columnMask属性并重启连接;脱敏与密码加密无关;共享规则需统一DBeaver≥23.3.0版本。

直接在结果集里隐藏或遮蔽字段内容,DBeaver 本身不提供“隐藏列”开关,但能通过 DB2ColumnMask 类型的列级脱敏规则实现视觉层的遮蔽(如手机号显示为 138****5678),本质是动态改写查询结果,而非真正删掉字段。
确认你的数据库是否支持列级脱敏逻辑
DBeaver 的字段脱敏显示依赖后端数据库对 COLUMN MASKING 或类似机制的支持,目前仅对 DB2、Oracle、SQL Server 等部分商业数据库有原生适配;MySQL、PostgreSQL 等开源数据库默认不触发 DB2ColumnMask 行为,即使你在驱动属性里填了规则也不会生效。
- DB2 连接下,
DB2ColumnMask会读取配置中的ruleText字段并实时应用 - MySQL 连接下,即使你手动在数据源 XML 配置里写入
<mask>...</mask>,DBeaver 不解析也不执行 - 想在 MySQL/PG 上实现类似效果,必须靠 SQL 层自己处理,比如:
CONCAT(LEFT(phone, 3), '****', RIGHT(phone, 4))
手动配置 DB2 或 Oracle 的脱敏规则(非 JSON 导出方式)
如果你用的是 DB2 或 Oracle,且已确认连接正常,可以直接在数据源配置中硬编码脱敏规则,无需导出导入 JSON。关键路径是编辑数据源 → 驱动属性 → 添加自定义属性:
- 属性名填
columnMask(注意大小写) - 属性值填规则文本,例如:
phone:REPLACE($1, SUBSTR($1, 4, 7), '*******') - 该规则会被
DB2ColumnMask解析,$1 表示当前字段原始值 - 修改后需重启连接或刷新元数据,否则旧结果集不会重绘
别误把“密码加密”当“字段脱敏”
很多人在 DataSourceSerializerLegacy.java 里看到 decryptPassword 就以为脱敏逻辑也走同一套加密解密流程,其实完全无关。密码加密只用于保护连接凭据,而字段脱敏是结果集渲染阶段的字符串替换,二者在代码中属于不同模块:
-
decryptPassword()在连接建立前调用,影响的是能否连上库 -
DB2ColumnMask.apply()在查询返回后、渲染表格前调用,影响的是你看到什么 - 混淆这两者,容易在驱动属性里乱加
encryptPassword=true这类无效配置
团队共享脱敏规则时最常漏掉的一件事
导出的 .dbeaver-data-source.json 文件里确实包含脱敏规则字段,但导入时如果目标环境 DBeaver 版本低于 23.3.0,columnMask 属性会被静默忽略——因为该字段是 23.3.0 版本才正式加入驱动属性白名单的。团队协作前务必统一客户端版本,否则规则看似导入成功,实际查数据时毫无变化。


















