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

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

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

# 数据脱敏

更新时间：2026-04-13 15:30:53

[编辑](https://github.com/oceanbase/odc-doc/edit/V4.3.4/zh-CN/900.data-security-and-compliance/100.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-1000000002687089)。

示例：将数据库 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)

### 编辑敏感列

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

![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 | 列的数据类型。 |

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

- 地址

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

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)

### 管理识别规则

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

## 查看脱敏算法

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

您可以在项目协同窗口的 **安全规范** > **脱敏算法** 中查看 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 时，会自动开启数据脱敏。

1. 在 SQL 开发窗口的左侧导航栏中，通过工单 **[导出](https://www.oceanbase.com/docs/common-odc-1000000002687115)** 表 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-1000000002687120)**，插入数据到表 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-1000000002687107)，插入数据到表 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-1000000002687115)
 - [SQL 编辑和执行](https://www.oceanbase.com/docs/common-odc-1000000002687107)
 - [数据库变更管理](https://www.oceanbase.com/docs/common-odc-1000000002687120)

 上一篇 下一篇 ![有帮助](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) 咨询热线
