脱敏是指在用户无感知的情况下,对非授权用户返回被脱敏的数据。其主要原理是通过某种运算法则,在真实数据返回给访问终端前,按照既定规则,将原始数据映射到另一种形式(可以支持多种变化),该映射规则对查询用户不可见,且转换后的形式不能做逆向操作(即转换为原始数据)。
说明无感知是指用户使用的查询操作变化,也无需增加额外的运算操作。
非授权用户是指没有访问权限的用户,以访问表为例,用户具备该表的查询权限,但被限制对某些字段真实值的获得。
例如:
安全员通过脱敏配置接口,对表的某些敏感字段设置数据脱敏规则。这样原系统中的所有用户(包括管理员)再去查看表数据时,都得到的脱敏规则使能后的结果,且规则下发后立即生效,无需停机或者重启。
相应的,对于原本正常访问的数据库用户,定义为授权用户,安全员可以将这些数据库用户定义为某些对象的白名单用户,即给这些数据库用户添加白名单属性。这些白名单用户在登录系统完成鉴权后,就被系统识别为授权用户,访问表的方式也是没有变化的,而且获得的都是原始数据。
所以,从以上两个维度实现了更细粒度的数据访问控制,是对现有访问控制的增强,而且做到对现有业务系统无感知。
创建数据脱敏策略
- 切换到godlike用户,创建 tbl_datamask_xx表、tbl_datamask_yy表、tbl_datamask_zz表,并插入数据。
\c regression godlike
create table tbl_datamask_xx( i int, i_m int, ii int2, ii_m int2, j bigint, j_mbigint, x varchar, x_m varchar, y text, y_m text) distribute by shard(i);
NOTICE: Replica identity is needed for shard table,
please add to this table
through "alter table" command.
insert into tbl_datamask_xx values(1024, 1024, 7788,
7788,42949672960,42949672960,
'112233201804035566', '112233201804035566','abcdefghijk', 'abcdefghijk');
insert into tbl_datamask_xx(i, x) values(1025, 'all is null');
insert into tbl_datamask_xx(i, x, x_m, y_m) values(1026, 'all is null', 'this is
a very very very looooooooong string, i guess here is over 32 bytes length,
emmmmm',
'tbase!!~~~');
create table tbl_datamask_yy( i int, i_m int, ii int2, ii_m int2, j bigint, j_mbigint, x varchar, x_m varchar, y text, y_m text) distribute by shard(i);;
使用mls_admin用户创建数据脱敏策略
案例1:api健壮性测试
NOTICE: Replica identity is needed for shard table, please add to this table
through "alter table" command.
insert into tbl_datamask_yy values(1024, 1024, 7788, 7788,
42949672960,42949672960, '112233201804035566', '112233201804035566','abcdefghijk', 'abcdefghijk');
create table tbl_datamask_zz ( i int , j text , z text ) distribute by
shard(i);;
NOTICE: Replica identity is needed for shard table, please add to this table
through "alter table" command.
insert into tbl_datamask_zz values(1024,'x','y');
- 使用mls_admin用户创建数据脱敏策略。
\c regression mls_admin
select current_database();
current_database
------------------
regression
(1 row)
select current_user;
current_user
--------------
mls_admin
(1 row)