首批通过分布式安全可靠测评,为关键业务系统打造
数据脱敏
更新时间:2026-04-13 15:30:53
背景信息
数据脱敏是指对某些敏感信息,例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息,通过脱敏算法进行数据变形,以保护敏感隐私数据。
概念介绍
数据脱敏:在数据处理和数据存储过程中,通过一定的算法和技术,将敏感数据进行加工处理、模糊化或替换,使得数据无法识别或难以还原,从而达到保护数据安全、防止数据泄露的目的。
动态脱敏:对敏感数据进行实时的脱敏处理,只有在用户查询数据库时才对数据进行脱敏,而不对数据库中的源数据进行修改。动态脱敏通常用于生产环境,可以保持原始数据的完整性和准确性,同时避免了数据泄露的风险。动态脱敏的缺点是处理速度较慢,可能会影响数据库的查询效率。
静态脱敏:对敏感数据进行预处理,将处理后的数据替换原始数据存储在数据库等存储介质中。静态脱敏通常用于测试、开发和演示环境,可以保护敏感数据不被非授权人员查看,同时也避免了因敏感数据泄露导致的法律责任。静态脱敏的优点是处理速度较快,可以提高查询效率,但其缺点是无法恢复原始数据,可能会影响数据的准确性。
脱敏算法:用于对敏感数据进行脱敏处理的算法。脱敏算法能够有效地保护敏感数据的安全性,避免信息泄露,同时保留数据的格式和结构,以便于查询和使用。
识别规则:在数据脱敏功能中,使用规则来自动识别数据库中的敏感数据。扫描添加敏感列时,会通过添加的识别规则自动识别匹配的敏感列。
敏感列:在数据库表中,包含敏感数据的列。
原理介绍

执行流程

项目管理员在 安全规范 > 脱敏算法 中查看内置脱敏算法并测试脱敏效果。
项目管理员在 ODC 目标项目 > 敏感数据 中手动添加敏感列;如果通过自动扫描方式添加敏感列,需要先创建识别规则。
用户在执行查看表数据、SQL 窗口查询、结果集导出、导出工单、数据库变更工单操作时,包含的敏感列输出为脱敏数据。
前提条件
项目管理员或者 DBA 支持管理敏感列和识别规则。
所有用户均可查看、测试脱敏效果,不允许新建、编辑或者删除脱敏算法。
注意事项
数据脱敏暂未覆盖命令行窗口场景。
数据脱敏暂未覆盖 PL 执行场景。
配置识别规则脚本时,Groovy 只允许用户使用 Java 中的 Objects 类 和 Stirng 类。
配置识别规则脚本时,不支持 Groovy 闭包、自带的闭包函数。
MySQL 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。
Oracle 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。
Doris 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。
敏感列管理
添加敏感列
说明
ODC V4.2.2 及之后的版本支持为 MySQL 类型的数据添加敏感列。MySQL 数据源功能限制请参见 使用限制。
示例:将数据库 odc_test 中表 student 的列 email 和 mobile_phone 数据脱敏。
| 信息项 | 示例值 |
|---|---|
| 所属数据源 | mysql_4.2.0 |
| 源端数据库名称 | odc_test |
| 表名称 | student |
在项目协同窗口,单击 项目 > 敏感列 > 添加敏感列 > 手动添加/扫描添加。

通过 手动添加 或者 扫描添加 敏感列后,单击 提交。
方法一:手动添加敏感列。

方法二:自动扫描敏感列。
说明
自动扫描敏感列前,需要新建识别规则,具体操作请参见本文档中的 识别规则管理。

在 敏感数据 列表中可以查看和启用添加的敏感列。

编辑敏感列
如上图所示,在 敏感数据 列表中,单击操作项下的 编辑 按钮,可以修改敏感列的脱敏算法。

删除敏感列
在 敏感数据 列表中,单击操作项下的 删除 按钮,可以删除敏感列。
识别规则管理
识别规则是敏感数据管理能力的扩展。在手动添加敏感列的基础上,通过自定义识别规则,可以实现敏感列的自动扫描发现。识别规则定义了匹配条件,ODC 会将符合匹配条件的数据列判定为敏感列。ODC 的识别规则提供 3 种方式供用户灵活选择,分别是路径、正则、脚本。
路径:以敏感列所属的库名、表名、列名作为识别对象,填写路径识别表达式作为识别规则。使用点号(.)分隔库表列名称;使用星号(*)作为通配符;使用逗号(,)多个匹配规则。
配置项 是否必填 说明 规则名称 是 识别规则的名称(长度不能超过 64 个字符)。 规则状态 是 识别规则的状态:启用/停用。 匹配的规则 是 用于将数据列匹配为敏感列的规则。
示例:*.*.mobile_phone 表示匹配任意库和表内,名为 mobile_phone 的列。排除的规则 否 用于将数据列排除为敏感列的规则。 注意
在判定数据列是否为敏感列时,优先使用排除的规则进行判断,其次使用匹配的规则。
脱敏算法 是 识别出的敏感列默认使用的脱敏算法。 规则描述 否 识别规则的描述。 正则:以敏感列所属的库名、表名、列名和列备注作为识别对象,填写正则表达式作为识别规则。
配置项 是否必填 说明 规则名称 是 识别规则的名称(长度不能超过 64 个字符)。 规则状态 是 识别规则的状态:启用/停用。 识别对象-库名 否 使用数据库名称匹配的正则表达式。
示例:*,表示任何名称的库。识别对象-表名 否 使用数据表名称匹配的正则表达式。
示例:e[a-z]?.*,表示以字母 e 开头的任何小写英文表名。识别对象-列名 否 使用列名称匹配的正则表达式。 识别对象-列备注 否 使用列备注匹配的正则表达式。 脱敏算法 是 识别出的敏感列默认使用的脱敏算法。 规则描述 否 识别规则的描述。 脚本:以敏感列所属的库名、表名、列名、列备注和数据类型作为识别对象,填写 Groovy 脚本作为识别规则。
注意
脚本的输出必须为布尔值,即
True或者False。配置项 是否必填 说明 规则名称 是 识别规则的名称(长度不能超过 64 个字符)。 规则状态 是 识别规则的状态:启用/停用。 Groovy 脚本 是 判断是否为敏感列的符合 Groovy 语法规范的脚本。 脱敏算法 否 识别出的敏感列默认使用的脱敏算法。 规则描述 否 识别规则的描述。 ODC 内置了名为 column 的对象供用户在 Groovy 脚本中引用,对象中的属性和说明如下:
属性 类型 说明 schema String 列所属的库名。 table String 列所属的表名。 name String 列的名称。 comment String 列的备注。 type String 列的数据类型。
常用脚本识别规则的示例:
- 地址
if (("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("address") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("address") >= 0
|| column.comment.indexOf("地址") >= 0
|| column.comment.indexOf("住址") >= 0
|| column.comment.indexOf("位置") >= 0)) {
return true;
}
}
return false;
- 手机号
if (column.name.length() == 11 && ("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("phone") >= 0 || column.name.indexOf("mobile") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("phone") >= 0
|| column.comment.indexOf("电话") >= 0
|| column.comment.indexOf("mobile") >= 0
|| column.comment.indexOf("手机") >= 0)) {
return true;
}
}
return false;
- 身份证号码
if (column.name.length() >= 15 && ("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("id_number") >= 0 || column.name.indexOf("identity_card") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("identity card") >= 0
|| column.comment.indexOf("身份证") >= 0)) {
return true;
}
}
return false;
添加识别规则
示例:管理员通过添加数据库 odc_test 中表 student 的列 mobile_phone 的识别规则。
在项目协同窗口,单击 项目 > 敏感列 > 添加敏感列 > 扫描添加。

在 扫描添加敏感列 页面中,选择 识别规则 > 管理识别规则。

在 管理识别规则 页面中,单击 新建识别规则。

在 新建识别规则 页面中,填写或选择规则名称、规则状态、识别方式和脱敏算法后,单击 新建。

路径示例:
odc_test*.student.*a,*.*.mobile_phone,表示匹配数据库 odc_test 中表 student 的列 mobile_phone。在 识别规则 列表中可以查看和启用添加的识别规则。

管理识别规则
如上图所示,单击操作项下的 查看/编辑/删除 按钮,可以查看/修改/删除识别规则。
查看脱敏算法

您可以在项目协同窗口的 安全规范 > 脱敏算法 中查看 ODC 支持的脱敏算法。
ODC 支持的脱敏算法包括:
| 算法名称 | 测试数据 | 结果预览 |
|---|---|---|
| 全部遮掩(系统默认) | test value | ***** |
| 个人姓名(汉字类型) | 个人姓名 | **名 |
| 个人姓名(字母类型) | Personal Name | P** |
| 昵称 | Nickname | N***e |
| 邮箱 | odc@test.com | o**@test.com |
| 地址 | Hangzhou, Zhejiang Province, China | Hangzhou, Z*** |
| 手机号码 | 13500000000 | 135******00 |
| 固定电话 | 010-12345678 | **********78 |
| 证件号码 | 123456789 | 1*******9 |
| 银行卡号 | 1234 5678 5678 1234 | ***************1234 |
| 车牌号 | 浙AB1234 | 浙A**234 |
| 设备唯一识别号 | AB123456789CD | ****89CD |
| IP 地址 | 10.123.456.789 | 10...* |
| MAC 地址 | ab:cd:ef:gh:hi:jk | ab:*:*:*:*:* |
| MD5 | default | c21f969b5f03d33d43e04f8f136e7682 |
| SHA256 | default | 37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f |
| SHA512 | default | 1625cdb75d25d9f699fd2779f44095b6e320767f606f095eb7edab5581e9e3441adbb0d628832f7dc4574a77a382973ce22911b7e4df2a9d2c693826bbd125bc |
| SM3 | default | 40c357923156504f734717d8b4f5623e75209e9572701f4b51ef2a03d9ced863 |
| 数值取整 | 123.456 | 123 |
| 置空 | default | - |
| 缺省规则 | abcd1234 | abc**234 |
使用场景
添加的敏感列在导出、数据库变更和 SQL 窗口执行均生效。
场景一:导出数据时开启数据脱敏
示例:导出数据库 odc_test 中的表 student 时,会自动开启数据脱敏。
在 SQL 开发窗口的左侧导航栏中,通过工单 导出 表 student 后,在导出列表中的操作中,单击 查看。

在导出任务详情页面的右下角,单击 下载。

在本地磁盘中查看下载的表 student。

场景二:数据库变更
示例:插入数据到表 student 中,会自动开启数据脱敏。
在 SQL 开发窗口的左侧导航栏中,通过工单 新建数据库变更,插入数据到表 student 中。
在 SQL 开发窗口的左侧导航栏的
中查看数据库 odc_test 中 student 脱敏后的数据。
场景三:SQL 窗口执行语句
示例:插入数据到表 student 中,会自动开启数据脱敏。
在 SQL 窗口中 编辑 SQL 语句,插入数据到表 student 中。

在结果页签中可以查看表 student 中脱敏后的数据。