原文链接:https://www.gbase.cn/community/post/5497
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
概述
由于敏感数据是数据库安全中重要的一部分,因此对于敏感数据的脱敏是很有必要的。GBase 8a MPP Cluster 提供动态数据脱敏功能供不同用户使用,以满足不同需求。
- 使得开发人员或者数据库管理员能够有效控制数据库中敏感数据的暴露程度,并且在数据库层面生成脱敏数据,大大简化了业务应用层的安全设计和编码。
- 使得用户可以通过 SQL 语法的形式,给需要进行数据脱敏的字段添加脱敏属性,并通过用户权限控制,决定是否对有查询要求的用户暴露原始数据。
数据脱敏功能
动态数据脱敏并不会真正改动表中存储的实际数据,只是在查询的时候应用该特性控制查询返回的数据。
动态数据脱敏是否启用受当前用户权限影响:
super 用户和拥有 unmask 权限的用户不受脱敏规则影响可以访问实际数据;
没有 unmask 权限的用户受脱敏规则影响只能访问到脱敏后的数据;
没有 unmask 权限的用户执行 sql 的 warning 信息中含有的表数据显示为'******';
脱敏只对投影列有效;
数据脱敏功能不支持 blob、longtext、longblob 列。
脱敏表创建示例介绍
数据脱敏用户创建
创建脱敏数据库用户:
例如使用dba账户创建数据库用户testuser,密码为123456 create user testuser identified by '123456'; 授予testuser用户对库testdb的操作权限,例如授于create、select、insert权限(有其它权限需求,可以根据需求授权) grant select,insert,create on testdb.* to testuser; 启用脱敏函数使用,执行set global _gbase_skip_mask_func=0; |
默认脱敏
功能说明
1. 默认脱敏函数针对基本类型的数据列进行脱敏。
若数据类型包含 date、datetime 和 time。
- date 会以“1900-01-01”显示;
- datetime 会以“1900-01-01 00:00:00”显示;
- time 会以“00:00:00”显示。
2. 若数据类型是整型、浮点型和 decimal。
- 整型和浮点型会显示 0;
- decimal 会显示为 0.000...,带有结果小数位(定义的类型或者评估的类型) 个数 0。
3. 若数据类型是字符串类型的。
将会替换为固定 4 个 X 字符“xxxx”。
4. NULL 值。
不做脱敏处理,显示为 NULL。
5. SQL 函数。
如果 SQL 函数的任一参数含有脱敏属性,则按照函数返回结果类型,执行默认脱敏。
示例
创建默认脱敏表:
CREATE TABLE t_m_default (name VARCHAR(10) MASKED WITH(FUNCTION = 'DEFAULT()'), b_date DATETIME MASKED WITH(FUNCTION = 'DEFAULT()'), age INT MASKED WITH(FUNCTION = 'DEFAULT()') ); |
插入1条数据
INSERT INTO t_m_default VALUES('Jone smith','1989-03-04 12:31:24.123000',29); |
脱敏前后数据
select * from t_m_default; 脱敏前数据(非脱敏用户查看) 脱敏后数据(脱敏用户查看)
|
随机脱敏
功能说明
随机脱敏函数只对数字类型起作用。
它会将数字随机显示成指定范围内的值,若多次执行,同一行的随机值会不同。
示例
创建随机脱敏表
假设设置脱敏范围为(1,4)。 CREATE TABLE t_m_random(age INT MASKED WITH(FUNCTION = 'RANDOM(1,4)')); |
插入1条数据
INSERT INTO t_m_random VALUES(29),(19); |
脱敏前后数据
SELECT * FROM t_m_random; 脱敏前数据(非脱敏用户查看) 脱敏后数据(脱敏用户查看) |
自定义脱敏
功能说明
自定义脱敏是对字符列进行脱敏,用户可以设定三个参数,prefix 开始保留字符数
量,suffix 结尾保留字符数量以及 padding 遮挡字符,如果实际内容长度小于等于
prefix+suffix+length(padding)长度,则直接显示 padding 的字符内容。
示例
创建自定义脱敏表
设定 prefix 为 3,suffix 为 6,padding 字符“XXXX”。 CREATE TABLE t_m_partial_1(context VARCHAR(255) MASKED WITH(FUNCTION = 'PARTIAL(3,"XXXX",6)')); |
插入1条数据
INSERT INTO t_m_partial_1 VALUES('This is a book on the desk.'),('Hello'); |
查询脱敏后数据
select * from t_m_partial_1; 脱敏前数据(非脱敏用户查看) 脱敏后数据(脱敏用户查看) |
SHA脱敏
功能说明
SHA 脱敏对字符列起作用,对列内容应用 SHA 算法处理。
示例
创建SHA脱敏表
CREATE TABLE t_m_sha(context VARCHAR(255) MASKED WITH(FUNCTION = 'SHA()')); |
插入1条数据
INSERT INTO t_m_sha VALUES('abc'); |
查询脱敏后数据
SELECT * FROM t_m_sha; 脱敏前数据(非脱敏用户查看) 脱敏后数据(脱敏用户查看) |
keymask 脱敏
功能说明
指定字符位置脱敏函数 keymask(substr,padding,pos) 。
功能:指定字符为初始计数位置,指定位数内脱敏功能。keymask 脱敏函数只用于
varchar/char 列进行脱敏,其他类型列使用该函数将报错返回。
参数说明如下:
参数类型 | 参数说明 |
varchar/char | 需要查找的子字符串,如:xiaoming@gbase.cn 的substr被设置为"@"。注,如 substr 长度长于被查找字符串长度将会报错。 |
varchar/char | 表示在查找到 substr 位置的之前或者之后用于覆盖的字符串。如,"xxx"、"***"等。 |
int | 0/1 覆盖方向,0 表示向前覆盖,1 表示向后覆盖。 |
脱敏规则如下:
1)如果在内容中未发现 substr,则不做脱敏操作。并在 show warnings 中看到对应
不脱敏操作的原因。如:substr ‘xxxx’is not exist in string ‘xxxxxx’。
2)如果待查找字符串中存在多个 substr,那么只处理第一次出现的 substr 的位置。
3)如果脱敏后的字符串超过字段定义的列宽,则按照 pos 的值在前或在后截断。
示例
创建keymask 脱敏表
create table t(a varchar(255) masked with(function='keymask("@gbase","****",0)')); |
插入1条数据
insert into t values('gbase@gbase.cn'); |
查看脱敏后数据
select * from t; 脱敏前数据(非脱敏用户查看) 脱敏后数据(脱敏用户) |
原文链接:https://www.gbase.cn/community/post/5497
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。