---
title: "数据脱敏 - 开发者中心 ODC V4.4.2 | OceanBase 文档中心"
description: 数据脱敏 背景信息 数据脱敏是指对某些敏感信息，例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息，通过脱敏算法进行数据变形，以保护敏感隐私数据。 概念介绍 数据脱敏：在数据处理和数据存储过程中，通过一定的算法和技术，将敏感数据进行加工处理、模糊化或替换，使得数据无法识别或难以还原，从而达到保护数据安全…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*lqS5SYzz_YEAAAAAAAAAAAAADiGDAQ/original) 开发者中心 ODCV 4.4.2

# 数据脱敏

更新时间：2026-05-16 15:22:53

[编辑](https://github.com/oceanbase/odc-doc/edit/V4.4.2/zh-CN/600.database-change-risk-management/100.project-collaborative-management/600.data-desensitization.md)  

## 背景信息

数据脱敏是指对某些敏感信息，例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息，通过脱敏算法进行数据变形，以保护敏感隐私数据。

## 概念介绍

- 数据脱敏：在数据处理和数据存储过程中，通过一定的算法和技术，将敏感数据进行加工处理、模糊化或替换，使得数据无法识别或难以还原，从而达到保护数据安全、防止数据泄露的目的。
 - 动态脱敏：对敏感数据进行实时的脱敏处理，只有在用户查询数据库时才对数据进行脱敏，而不对数据库中的源数据进行修改。动态脱敏通常用于生产环境，可以保持原始数据的完整性和准确性，同时避免了数据泄露的风险。动态脱敏的缺点是处理速度较慢，可能会影响数据库的查询效率。
 - 静态脱敏：对敏感数据进行预处理，将处理后的数据替换原始数据存储在数据库等存储介质中。静态脱敏通常用于测试、开发和演示环境，可以保护敏感数据不被非授权人员查看，同时也避免了因敏感数据泄露导致的法律责任。静态脱敏的优点是处理速度较快，可以提高查询效率，但其缺点是无法恢复原始数据，可能会影响数据的准确性。
 - 脱敏算法：用于对敏感数据进行脱敏处理的算法。脱敏算法能够有效地保护敏感数据的安全性，避免信息泄露，同时保留数据的格式和结构，以便于查询和使用。
 - 识别规则：在数据脱敏功能中，使用规则来自动识别数据库中的敏感数据。扫描添加敏感列时，会通过添加的识别规则自动识别匹配的敏感列。
 - 敏感列：在数据库表中，包含敏感数据的列。

## 原理介绍

![1.1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/1.2.png)

## 执行流程

![2.2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/2.2.png)

1. 项目管理员在 **安全规范** > **脱敏算法** 中查看内置脱敏算法并测试脱敏效果。
 2. 项目管理员在 ODC 目标项目 > **敏感数据** 中手动添加敏感列；如果通过自动扫描方式添加敏感列，需要先创建识别规则。
 3. 用户在执行查看表数据、SQL 窗口查询、结果集导出、导出工单、数据库变更工单操作时，包含的敏感列输出为脱敏数据。

## 前提条件

- 项目管理员或者 DBA 支持管理敏感列和识别规则。
 - 所有用户均可查看、测试脱敏效果，不允许新建、编辑或者删除脱敏算法。

## 注意事项

- 数据脱敏暂未覆盖命令行窗口场景。
 - 数据脱敏暂未覆盖 PL 执行场景。
 - 配置识别规则脚本时，Groovy 只允许用户使用 Java 中的 Objects 类 和 Stirng 类。
 - 配置识别规则脚本时，不支持 Groovy 闭包、自带的闭包函数。
 - MySQL 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。
 - Oracle 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。
 - Doris 数据源导出若涉及敏感数据使用全部遮掩算法脱敏。

## 敏感列管理

### 添加敏感列

#### 说明

ODC V4.2.2 及之后的版本支持为 MySQL 类型的数据添加敏感列。MySQL 数据源功能限制请参见 [使用限制](https://www.oceanbase.com/docs/common-odc-1000000005551384)。

示例：将数据库 odc_test 中表 student 的列 email 和 mobile_phone 数据脱敏。

| 信息项 | 示例值 |
| --- | --- |
| 所属数据源 | mysql_4.2.0 |
| 源端数据库名称 | odc_test |
| 表名称 | student |

1. 在项目协同窗口，单击 **项目** > **敏感列** > **添加敏感列** > **手动添加**/**扫描添加**。

   ![3](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/3.0.png)
 2. 通过 **手动添加** 或者 **扫描添加** 敏感列后，单击 **提交**。

      - 方法一：手动添加敏感列。

       ![4](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/4.0.png)
      - 方法二：自动扫描敏感列。

       #### 说明

       自动扫描敏感列前，需要新建识别规则，具体操作请参见本文档中的 **识别规则管理**。

       ![5](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/5.png)
 3. 在 **敏感数据** 列表中可以查看和启用添加的敏感列。

   ![6](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/6.png)

### 编辑敏感列

如上图所示，在 **敏感数据** 列表中，单击操作项下的 **编辑** 按钮，可以修改敏感列的脱敏算法。不同脱敏算法的介绍，请参见 [脱敏算法](https://www.oceanbase.com/docs/common-odc-1000000005551472)。

![7](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/7.png)

### 删除敏感列

在 **敏感数据** 列表中，单击操作项下的 **删除** 按钮，可以删除敏感列。

## 识别规则管理

识别规则是敏感数据管理能力的扩展。在手动添加敏感列的基础上，通过自定义识别规则，可以实现敏感列的自动扫描发现。识别规则定义了匹配条件，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 | 列的数据类型。 |

常用脚本识别规则的示例：

- 地址

  ```java
  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;

  ```
 - 手机号

  ```java
  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;

  ```
 - 身份证号码

  ```java
  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 的识别规则。

1. 在项目协同窗口，单击 **项目** > **敏感列** > **添加敏感列** > **扫描添加**。

   ![11](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/11.png)
 2. 在 **扫描添加敏感列** 页面中，选择 **识别规则** > **管理识别规则**。

   ![12](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/12.png)
 3. 在 **管理识别规则** 页面中，单击 **新建识别规则**。

   ![13](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/13.png)
 4. 在 **新建识别规则** 页面中，填写或选择规则名称、规则状态、识别方式和脱敏算法后，单击 **新建**。

   ![14](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/14.png)

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

   ![15](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/422/900.data-security-and-compliance/100.data-desensitization/15.png)

### 管理识别规则

如上图所示，单击操作项下的 **查看**/**编辑**/**删除** 按钮，可以查看/修改/删除识别规则。

## 使用场景

添加的敏感列在导出、数据库变更和 SQL 窗口执行均生效。

### 场景一：导出数据时开启数据脱敏

示例：导出数据库 odc_test 中的表 student 时，会自动开启数据脱敏。

1. 在 SQL 开发窗口的左侧导航栏中，通过工单 **[导出](https://www.oceanbase.com/docs/common-odc-1000000005551409)** 表 student 后，在导出列表中的操作中，单击 **查看**。

   ![17](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/17.png)
 2. 在导出任务详情页面的右下角，单击 **下载**。

   ![18](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/18.png)
 3. 在本地磁盘中查看下载的表 student。

   ![19](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/19.png)

### 场景二：数据库变更

示例：插入数据到表 student 中，会自动开启数据脱敏。

1. 在 SQL 开发窗口的左侧导航栏中，通过工单 **[新建数据库变更](https://www.oceanbase.com/docs/common-odc-1000000005551406)**，插入数据到表 student 中。
 2. 在 SQL 开发窗口的左侧导航栏的 ![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/quickstart/webodc/sql%20editing/database.png) 中查看数据库 **odc_test** 中 student 脱敏后的数据。

   ![20](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/20.png)

### 场景三：SQL 窗口执行语句

示例：插入数据到表 student 中，会自动开启数据脱敏。

1. 在 SQL 窗口中 [编辑 SQL 语句](https://www.oceanbase.com/docs/common-odc-1000000005551375)，插入数据到表 student 中。

   ![21](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/1400.data-security-and-compliance/1.data-desensitization/sql%20window%2021.png)
 2. 在结果页签中可以查看表 student 中脱敏后的数据。

## 相关文档

- [导出数据](https://www.oceanbase.com/docs/common-odc-1000000005551409)
 - [SQL 编辑和执行](https://www.oceanbase.com/docs/common-odc-1000000005551375)
 - [数据库变更管理](https://www.oceanbase.com/docs/common-odc-1000000005551406)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
