关键字:
KingbaseES、数据脱敏、人大金仓
什么是数据脱敏
数据脱敏也叫数据去隐私化,在给定脱敏规则和策略的情况下,对敏感数据如手机号、邮箱等信息,进行转换或者修改的技术手段,防止敏感数据直接在不可靠的环境下使用。
数据脱敏主要分为静态脱敏和动态脱敏:
- 静态数据脱敏通常将生产环境中的敏感数据交付至开发、测试或外发环境时使用,按照脱敏规则一次性完成大批量数据的变形转换处理,数据导出后已经改变了原始数据的内容,使得脱敏后的数据成为了测试开发源数据。
- 动态数据脱敏通常用于对外提供查询服务的场景中,与生产关系紧密关联。按照脱敏规则对于外部申请访问的数据进行即时处理并返回脱敏后的查询结果,降低了需求方获取脱敏后数据的延迟,在屏蔽敏感信息的同时保证了源数据的一致性和有效性。
Kingbase的数据脱敏
Kingbase主要提供动态数据脱敏功能,同时支持备份数据脱敏化,主要优势有以下几点:
- 可以选择不同格式的密文
- 数据可以运行时被编辑,所以数据脱敏非常适合数据不断变化的场景
- 可以在数据任意位置创建脱敏策略,以便有效管理数据
在使用Kingbase的数据脱敏功能时,可以使用不同的脱敏策略的保护敏感数据。数据脱敏对应用程序透明,保留原始的数据字段类型和格式。它对数据库高度透明,因为缓存和存储中的数据一致,仅仅在SQL查询结果返回时才更改。连接相同数据库的应用程序可以同时执行数据脱敏。
在KingbaseES中,数据脱敏策略仅对用户表及物化视图有效,系统表无效。不支持在脱敏表上建立物化视图,若对已建立物化视图的表上配置脱敏策略,则该物化视图将无法更新数据。
在使用Kingbase的数据脱敏时会有以下限制
- 数据脱敏策略仅允许安全员sso进行配置及查看,其他用户均无权限。
- 个脱敏对象(列)上只能配置一种脱敏策略。
- 数据脱敏目前仅支持对普通表、分区表和物化视图配置脱敏策略,不支持普通视图,在脱敏表上建立视图后查询视图,脱敏用户查询到的结果是脱敏后的值。
- 仅支持在分区表的主表上配置脱敏策略
Kingbase数据脱敏插件
- 加载数据脱敏插件
使用Kingbase的数据脱敏功能需要加载 sys_anon 插件,然后为数据库安装扩展。步骤如下:
- 修改数据库文件夹中的kingbase.conf文件内的shared_preload_libraries参数.
shared_preload_libraries = 'sys_anon'
- 新建数据库时需要安装扩展。
CREATE EXTENSION sys_anon;
- 数据脱敏开关
如果要使数据脱敏设置生效,必须打开开关,数据脱敏功能关闭时,数据库不会对脱敏对象进行脱敏处理。
ALTER SYSTEM SET anon.enable = on | off;
CALL sys_reload_conf();
- 数据脱敏策略
- 脱敏策略
- 添加脱敏策略
anon.add_policy(
policy_name text,
objname text,
username text,
func_desc text,
para_list text
)
参数说明:
policy_name
脱敏策略名,不可为空,策略名唯一。
objname
待脱敏的对象,不可为空,格式为:模式.表.列(不写模式时为表.列,模式默认设置为public)。
username
待脱敏的对象用户名,可为空,为空对所有用户脱敏。
func_desc
脱敏使用的函数(只需要填写函数名),可为空,为空设置为默认脱敏。
支持使用的脱敏函数详见下文 脱敏函数说明。
para_list
脱敏函数的参数列表(目前仅适用于部分脱敏),若函数无参数,则该项无效;若函数为部分脱敏时需要填写,参数之间用‘,’分隔,例如’2,2’,参数列表个数为2。
- 修改脱敏策略
anon.alter_policy(
policy_name text,
username text,
func_desc text,
para_list text
)
参数说明:
policy_name
脱敏策略名,不可为空。
username
待脱敏的对象用户名,可为空,为空时不修改脱敏用户。
func_desc
脱敏使用的函数(只需要填写函数名),可为空,为空时不修改脱敏函数。
para_list
脱敏函数的参数列表(目前仅适用于部分脱敏),可为空,为空时不修改参数列表。
- 删除脱敏策略
anon.remove_policy(policy_name text)
参数说明:
policy_name
脱敏策略名,为空时删除所有策略。
- 脱敏函数
函数 | 数据类型 | 描述 |
default | varchar,char,text,timestamp, timestamptz,date,time,timetz,integer,smallint,tinyint,bigint,smallserial,serial, bigserial,boolean,real,double | 默认脱敏,无需指定,当指定脱敏函数为空时默认指定为默认脱 敏,各类型数据脱敏结果如下: 字符类型:空值 数字类型:0(不保证精度) 布尔类型:f 时间类型:年月日部分:1970-01-01, 时分秒部分:00:00:00 |
partial(prefix int, suffix int) | varchar,char,text | 部分脱敏(自定义脱敏),prefix为保留的前n位,suffix为保 留的后n位,其余位用*进行脱敏,例如partial(2,2) |
random_string | varchar,char,text | 对字符数据类型进行随机脱敏,变长数据根据原数据的数据长度 生成随机字符串,定长数据为根据最大长度生成随机字符串 |
random_date | timestamp,timestamptz,date, time,timetz | 对时间数据类型进行随机脱敏,生成1900-01-01 00:00:00至今 之间的随机时间(根据数据类型改变) |
random_int | integer,smallint,tinyint, bigint,smallserial,serial, bigserial | 对数字数据类型进行随机脱敏,生成0至该数据类型的最大值的 随机数 |
email_mask | varchar,char,text | 邮件格式字符串专用脱敏函数,将email字符数据最后一个.之前 的所有字符替换为*,@符号保留,例如 " zhangsan @ kingbase . com.cn" 脱敏为 " ******@********** .cn",没有.符号时不 保留后缀字符串 |
- 查询脱敏策略
可以通过查看视图anon.all_policy查询已有的脱敏策略。
select * from anon.all_policy ;
列名 | 数据类型 | 说明 |
policy_name | text | 数据脱敏策略名 |
table_name | text | 脱敏对象名 |
schema_name | text | 脱敏对象模式名 |
column_name | text | 脱敏列名 |
masking_user | text | 被脱敏用户名 |
masking_func | text | 脱敏函数 |
func_parameters | text | 脱敏函数参数列表 |