数据脱敏
背景
由于敏感数据是数据库安全中重要的一部分,因此对于敏感数据的脱敏是
很有必要的。GBase 8a MPP Cluster提供动态数据脱敏功能供不同用户使用, 以满足不同需求。
使得开发人员或者数据库管理员能够有效控制数据库中敏感数据的暴露程 度,并且在数据库层面生成脱敏数据,大大简化了业务应用层的安全设计和编 码。
使得用户可以通过SQL语法的形式,给需要进行数据脱敏的字段添加脱敏 属性,并通过用户权限控制,决定是否对有查询要求的用户暴露原始数据。
脱敏功能
动态数据脱敏并不会真正改动表中存储的实际数据,只是在查询的时候应 用该特性控制查询返回的数据。
动态数据脱敏是否启用受当前用户权限影响,super用户和拥有unmask权 限的用户不受脱敏规则影响可以访问实际数据,没有unmask权限的用户受脱敏 规则影响只能访问到脱敏后的数据。
脱敏只对投影列有效。
MASKED WITH(FUNCTION = 'TYPE (参数)')
动态数据脱敏支持四种类型数据脱敏函数,如下:
1) 默认脱敏default类型。
这种类型没有参数。
MASKED WITH(FUNCTION = 'DEFAULT。')
2) 随机脱敏random类型。
random(min,max)有两个参数标定随机范围,参数min的最小值为1,参数 max的最大值为1。。。
MASKED WITH(FUNCTION = 'RANDOMd, 100)')
3) 自定义脱敏partial类型。
这种类型包含三个参数,partial (prefix, padding, suffix),参数详细
说明如下:
• prefix表示前缀保留显示字符数量;
• padding表示脱敏显示字符;
• suffix表示结尾保留显示字符数量。
MASKED WITH(FUNCTION = 'PARTIAL(1,'XXXX',1)')
4) 哈希脱敏sha类型。
这个类型没有参数。
MASKED WITH(FUNCTION = 'SHA()')
5) 自定义脱敏keymask类型。
keymask(substr,padding, pos)
masked with(function=' keymask(〃@gbase〃,〃****〃,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函数的任一参数含有脱敏属性,则按照函数返 同结果类型,执行默认脱敏。
示例
gbase> CREATE TABLE t_m_default(name VARCHAR(10) MASKED
WITH(FUNCTION = 'DEFAULT()'),b_date DATETIME MASKED
WITH(FUNCTION = 'DEFAULT()'),age INT MASKED WITH(FUNCTION ='DEFAULT0'));
Query OK, 0 rows affected (Elapsed: 00:00:00.53)
gbase> INSERT INTO t_m_default VALUES('Jone smith','1989-03-04 12:31:24.123000',29);
Query OK, 1 row affected (Elapsed: 00:00:00.12)
gbase> SELECT * FROM t_m_default;
+ + + +
| name | b_date | age |
+ + + +
| xxxx | 1900-01-01 00:00:00 | 0 |
+ + + +
1 row in set (Elapsed: 00:00:00.09)
脱敏前
姓名(varchar) 出生日期(datetime) 年龄(int)
Jone smith 1989-03-04 12:31:24.123000 29
脱敏后
姓名(varchar) 出生日期(datetime) 年龄(int)
xxxx 1900-01-01 00:00:00 0
随机脱敏
它会将数字随机显示成指定范围内的值,若多次执行,同一行的随机值会 不