文档

数据脱敏

更新时间:

背景信息

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

概念介绍

  • 数据脱敏:在数据处理和数据存储过程中,通过一定的算法和技术,将敏感数据进行加工处理、模糊化或替换,使得数据无法识别或难以还原,从而达到保护数据安全、防止数据泄露的目的。

  • 动态脱敏:对敏感数据进行实时的脱敏处理,只有在用户查询数据库时才对数据进行脱敏,而不对数据库中的源数据进行修改。动态脱敏通常用于生产环境,可以保持原始数据的完整性和准确性,同时避免了数据泄露的风险。动态脱敏的缺点是处理速度较慢,可能会影响数据库的查询效率。

  • 静态脱敏:对敏感数据进行预处理,将处理后的数据替换原始数据存储在数据库等存储介质中。静态脱敏通常用于测试、开发和演示环境,可以保护敏感数据不被非授权人员查看,同时也避免了因敏感数据泄露导致的法律责任。静态脱敏的优点是处理速度较快,可以提高查询效率,但其缺点是无法恢复原始数据,可能会影响数据的准确性。

  • 脱敏算法:用于对敏感数据进行脱敏处理的算法。脱敏算法能够有效地保护敏感数据的安全性,避免信息泄露,同时保留数据的格式和结构,以便于查询和使用。

  • 识别规则:在数据脱敏功能中,使用规则来自动识别数据库中的敏感数据。扫描添加敏感列时,会通过添加的识别规则自动识别匹配的敏感列。

  • 敏感列:在数据库表中,包含敏感数据的列。

原理介绍

image.png

执行流程

image.png

  1. 项目管理员在 安全规范 > 脱敏算法 中查看内置脱敏算法并测试脱敏效果。

  2. 项目管理员在 ODC 目标项目 > 敏感数据 中手动添加敏感列;如果通过自动扫描方式添加敏感列,需要先创建识别规则。

  3. 用户在执行查看表数据、SQL 窗口查询、结果集导出、导出工单、数据库变更工单操作时,包含的敏感列输出为脱敏数据。

前提条件

  • 项目管理员或者 DBA 支持管理敏感列和识别规则。

  • 所有用户均可查看、测试脱敏效果,不允许新建、编辑或者删除脱敏算法。

注意事项

  • 数据脱敏暂未覆盖命令行窗口场景。

  • 数据脱敏暂未覆盖 PL 执行场景。

  • 配置识别规则脚本时,Groovy 只允许用户使用 Java 中的 Objects 类 和 Stirng 类。

  • 配置识别规则脚本时,不支持 Groovy 闭包、自带的闭包函数。

敏感列管理

添加敏感列

示例:将数据库 odc_test 中表 employee 的列 name 数据脱敏。

信息项

示例值

所属数据源

mysql_4.2.0

源端数据库名称

odc_test

表名称

employee

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

    image.png

  2. 通过 手动添加 或者 扫描添加 敏感列后,单击 提交

    • 方法一:手动添加敏感列。

      image.png

    • 方法二:自动扫描敏感列。

      说明

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

      image.png

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

    image.png

编辑敏感列

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

image.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 中表 employee 的列 name 的识别规则。

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

    image.png

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

    image.png

  3. 管理识别规则 页面中,单击 新建识别规则

    image.png

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

    image.png

    路径示例:odc_test*.employee.*a,*.*.name,表示匹配数据库 odc_test 中表 employee 的列 name。

  5. 识别规则 列表中可以查看和启用添加的识别规则。

    image.png

管理识别规则

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

查看脱敏算法

image.png

您可以在项目协同窗口的安全规范>脱敏算法中查看 ODC 支持的脱敏算法。

ODC 支持的脱敏算法包括:

算法名称

测试数据

结果预览

全部遮掩(系统默认)

test value

*****

个人姓名(汉字类型)

个人姓名

**名

个人姓名(字母类型)

Personal Name

P**

昵称

Nickname

N***e

邮箱

***@oceanbase.com

***@oceanbase.com

地址

Hangzhou, Zhejiang Province, China

Hangzhou, Z***

手机号码

1350000****

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 开发窗口的左侧导航栏中,通过工单导出结构和数据表 student 后,在导出列表中的操作中,单击 查看

    image.png

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

    image.png

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

    image.png

场景二:数据库变更

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

  1. 在 SQL 开发窗口的左侧导航栏中,通过工单新建数据库变更,插入数据到表 student 中。

  2. 在 SQL 开发窗口的左侧导航栏的image.png中查看数据库 odc_test 中 student 脱敏后的数据。

    image.png

场景三:SQL 窗口执行语句

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

  1. 在 SQL 窗口中,编辑 SQL 语句,插入数据到表 student 中。

    image.png

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

相关文档

  • 本页导读 (0)
文档反馈