KingbaseES数据脱敏

1.1. 数据脱敏简介

1.1.1. 关于数据脱敏

数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。

数据脱敏主要分为静态脱敏和动态脱敏,静态数据脱敏(Static Data Masking)采用“先脱敏-后分发”的方式,一般是将生产环境数据拷贝到测试或开发库中,导出后的数据已经改变了原始数据的内容,使得脱敏后的数据成为了测试开发源数据。而动态数据脱敏(Dynamic Data Masking)是与生产环境紧密关联的,访问敏感数据时实时地进行脱敏,主要用于直接访问生产数据的场景,在屏蔽敏感信息的同时也保证了源数据的一致性和有效性。

KingbaseES主要提供动态数据脱敏功能,同时支持备份数据脱敏化。

1.1.2. 使用数据脱敏的场景

当您必须隐藏部分应用程序所访问的敏感数据时,请使用数据脱敏功能。KingbaseES数据库提供不同的数据脱敏策略来隐藏敏感数据。例如,员工表的身份证信息,向一些用户展示数据时,可以隐藏中间几位数字。

数据脱敏对应用程序透明,保留原始的数据字段类型和格式。它对数据库高度透明,因为缓存和存储中的数据一致,仅仅在SQL查询结果返回时才更改。连接相同数据库的应用程序可以同时执行数据脱敏。

1.1.3. 使用数据脱敏的优势

使用数据脱敏的优势如下:

  • 可以选择不同格式的密文

  • 数据可以运行时被编辑,所以数据脱敏非常适合数据不断变化的场景

  • 可以在数据任意位置创建脱敏策略,以便有效管理数据

1.1.4. 数据脱敏的对象

在KingbaseES中,数据脱敏策略仅对用户表及物化视图有效,系统表无效。不支持在脱敏表上建立物化视图,若对已建立物化视图的表上配置脱敏策略,则该物化视图将无法更新数据。

1.1.5. 数据脱敏的限制

KingbaseES数据库中对数据脱敏功能的运行做了以下限制:

  1. 数据脱敏策略仅允许安全员sso进行配置及查看,其他用户均无权限。

  2. 一个脱敏对象(列)上只能配置一种脱敏策略。

  3. 数据脱敏目前仅支持对普通表、分区表和物化视图配置脱敏策略,不支持普通视图,在脱敏表上建立视图后查询视图,脱敏用户查询到的结果是脱敏后的值。

  4. 仅支持在分区表的主表上配置脱敏策略

1.1.6. 数据脱敏插件

使用数据脱敏功能时需要在 kingbase.conf 文件中的guc参数 shared_preload_libraries 中加载 sys_anon 插件。开启数据脱敏插件步骤如下所示:

  1. 修改 kingbase.conf 文件中 shared_preload_libraries 参数。

    shared_preload_libraries = 'sys_anon'
    
  2. 新建数据库需要安装扩展

    CREATE EXTENSION sys_anon;
    

1.2. 数据脱敏函数与特性

数据脱敏功能通过使用脱敏函数来实现,KingbaseES支持默认完整脱敏、部分数据脱敏、随时数据脱敏和邮件数据脱敏四种脱敏函数。使用数据库脱敏函数需要结合对应的脱敏策略。

1.2.1. 默认完整脱敏

默认脱敏default是一种完整数据脱敏,无需指定,当指定脱敏函数为空时默认指定为默认脱敏。支持的数据类型和各类型数据脱敏结果如下:

表 10.2.1 默认脱敏

函数

支持的数据类型

描述

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

例如,创建一个默认脱敏策略:

\c - sso
select add_policy('pol1', 't1.a', '','','');

1.2.2. 部分数据脱敏

可以使用函数partial自定义数据脱敏,对部分数据进行脱敏输出。部分数据脱敏需要在实际数据中设置脱敏的开始位置和结束位置,这部分数据将用符号*进行脱敏。支持的数据类型和脱敏结果如下:

表 10.2.2 部分数据脱敏

函数

支持的数据类型

描述

partial(prefix int,suffix int)

varchar,char,text

部分脱敏(自定义脱敏),prefix为保留的前n位,suffix为保留的后n位,其余位用*进行脱敏,例如partial(2,2)

例如,创建一个部分脱敏策略:

\c - sso
select anon.add_policy('pol1','public.t1.a','u1','partial','2,2');

1.2.3. 随机数据脱敏

在随机脱敏中,通过将整个值替换成随机值来实现数据脱敏。每次查询结果集显示的脱敏数据都会随机变化,随机脱敏的数据将很难从直观上与真实数据区分开来。KingbaseES支持字符类型、时间类型、数字类型的随机脱敏,具体支持的数据类型和脱敏结果如下:

表 10.2.3 随机数据脱敏

函数

支持的数据类型

描述

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至该数据类型的最大值的随机数

例如,创建一个随机字符串脱敏策略:

\c - sso
select anon.add_policy('pol2', 'tab1.b', 'u1','random_string','');

1.2.4. 邮件数据脱敏

KingbaseES支持邮件格式字符串专用脱敏函数email_mask,将email字符数据最后一个符号.之前的所有字符都将用符号*进行脱敏。具体支持的数据类型和脱敏结果如下:

表 10.2.4 邮件数据脱敏

函数

支持的数据类型

描述

email_mask

varchar,char,text

邮件格式字符串专用脱敏函数,将email字符数据最后一个.之前的所有字符替换为*,@符号保留,例如 "zhangsan@kingbase. com.cn" 脱敏为 "******@**********.cn",没有.符号时不保留后缀字符串

例如,创建一个邮件脱敏策略:

\c - sso
select anon.add_policy('pol3', 'email_tab.email', 'u1','email_mask','');

1.2.5. 脱敏函数的注意事项

针对以上章节的脱敏函数介绍,还需要注意以下几点:

  1. 当部分脱敏需要保留的位数超过字符串长度时,会采用最基本的部分脱敏,字符串长度为奇数时脱敏最中间的一个字符,偶数时脱敏最中间的两个字符。

  2. 涉及字符串类型的脱敏,若数据类型为定长,则按照最大长度进行脱敏,若为变长,则按照实际长度进行脱敏。

  3. 当带有策略的列的数据类型被修改时,该列的数据类型只能被修改为当前策略支持范围内的数据类型。

1.3. 数据脱敏的使用

1.3.1. 数据脱敏开关

KingbaseES数据库中对数据脱敏功能设置了开关。数据脱敏功能关闭时,数据库不会对脱敏对象进行脱敏处理。安全员(sso)如果要使 KingbaseES 系统中的数据脱敏设置生效,必须打开该开关。

anon.enable

设置审计功能是否开启的总开关,有on和off两种选择,缺省为 off。

on表示打开数据脱敏功能;

off表示关闭数据脱敏功能;

打开(或关闭)数据脱敏开关的方式有如下方式:

  • 在KingbaseES启动之前,通过修改 kingbase.conf 文件,将 anon.enable设置为on(或off)

  • 在KingbaseES启动后,以安全员用户连接数据库,利用ALTER SYSTEM命令将 anon.enable 设置为on | off。打开(或关闭)数据脱敏开关,重载配置后,数据库系统中的数据脱敏功能立即生效(或失效)。

    打开(或关闭)数据脱敏开关并重载的命令:

ALTER SYSTEM SET anon.enable = on | off;
CALL sys_reload_conf();

1.3.2. 数据脱敏策略配置

1.3.2.1. 添加脱敏策略

语法

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。

返回值说明

无返回值

示例

SELECT anon.add_policy('pol1','public.t1.a','u1','partial','2,2');
1.3.2.2. 修改脱敏策略

语法

anon.alter_policy(policy_name text,
username text,
func_desc text,
para_list text
  )

参数说明

policy_name

脱敏策略名,不可为空。

username

待脱敏的对象用户名,可为空,为空时不修改脱敏用户。

func_desc

脱敏使用的函数(只需要填写函数名),可为空,为空时不修改脱敏函数。

para_list

脱敏函数的参数列表(目前仅适用于部分脱敏),可为空,为空时不修改参数列表。

返回值说明

无返回值

示例

SELECT anon.alter_policy('pol1','u2','random_string','');
1.3.2.3. 删除脱敏策略

语法

anon.remove_policy(policy_name text)

参数说明

policy_name

脱敏策略名,为空时删除所有策略。

返回值说明

无返回值

示例

SELECT anon.remove_policy('pol1');

1.3.3. 数据脱敏配置查询

数据脱敏策略设置可通过系统视图 anon.all_policy 查询,结构如下表所示:

表 10.3.5 系统视图 all_policy

列名

数据类型

说明

policy_name

text

数据脱敏策略名

table_name

text

脱敏对象名

schema_name

text

脱敏对象模式名

column_name

text

脱敏列名

masking_user

text

被脱敏用户名

masking_func

text

脱敏函数

func_parameters

text

脱敏函数参数列表

1.4. 备份数据脱敏化

1.4.1. 关于备份数据脱敏

当您需要使用脱敏备份脱敏数据时,KingbaseES支持对备份数据进行脱敏处理

例如,需要对表t1备份,t1表包含两列,id列和data列,t1已对data列配置默认脱敏,被脱敏用户为u1,当您使用u1用户对表t1进行备份时:

\c - u1
create table t1 (id int, data text);
insert into t1 values (1, 'a'),(2, 'b'), (3, 'c');

\c - sso
select select add_policy('polx', 't1.data', 'u1','','');

./sys_dump -d test -p 54321 -U u1 -W -f test.dmp
cat test.dmp
1
2
3

可见到备份文件中表数据是脱敏的。

1.4.2. 数据脱敏配置备份恢复

数据脱敏策略可以使用 sys_dumpsys_restore 进行备份恢复,操作步骤如下:

  1. 使用sso对每个配置了数据脱敏策略的数据库进行备份,例如:

./sys_dump -d test -p 54321 -U sso -W -F c -f anon.dmp
  1. 使用sso对新data实例进行恢复,例如:

./sys_restore -p 54321 -U sso -W -d test anon.dmp

注意

当数据库需要进行升级时也可以使用上述方法升级数据脱敏配置,但要在数据库升级前执行第一步即数据脱敏配置备份,升级完成后执行第二步恢复数据脱敏配置。

提示

数据脱敏配置备份恢复时,sys_dump和sys_restore不能指定-a参数,会导致数据脱敏配置无法备份恢复; 如果要指定--section参数,需要指定为post-data。

1.5. 数据脱敏的安全注意事项

1.5.1. 对其他功能的影响

数据脱敏不会影响日常数据库操作,例如备份恢复,导出和导入,数据库集群操作等。

1.5.2. 数据对象操作的一些注意事项

对于一些非查询操作,有以下注意事项:

  1. 当create table as或insert into的数据来源于脱敏数据,则插入的数据为脱敏后的值,且无法还原。

  2. 当merge into的数据来源于脱敏表(无论是否包含脱敏列),均无法更新数据。

  3. 分区表上存在脱敏策略时,若交换分区,仅交换分区数据,不交换脱敏策略。

  4. 对于设置了动态数据脱敏策略的表,需要谨慎授予其他用户对该表的trigger权限,以免其他用户利用触发器绕过脱敏策略。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值