config query.lang sql; create table xxx(a1 string,a2 string, a3 string,a4 string,a5 string);
复制
StellarDB可以通过配置并且导入规则表来实现对数据的脱敏。
规则表结构
图属性名 |
属性对应的值 |
用户名 |
需要配置掩码的图属性 |
掩码方式 |
department |
营业一部 |
Tom |
phone_number |
mark(custom,[4,8]) |
-
上表表示,用户Tom访问该图,如果图属性department对应的值是“营业1部”,则对应的phone_number可以全部展示,如果department值是其他值,则以掩码显示;
-
如果表中第一列的属性在图中不存在,对于用户Tom,phone_number字段正常显示;
-
如果用户不在规则表中,该用户可以正常访问图中phone_number字段。
配置掩码流程
-
创建规则表
-
插入数据
insert into table xxx values(…);
复制 -
导入规则
config query.lang cypher; LOAD DESENSITIZATION RULES FROM TABLE [db_name].[tbl_name] INTO GRAPH [graph_name];
复制
参考案例
-
在Guardian界面追加使用图谱的用户,给予
GLOBAL
的读权限即可(也可以按需配置指定图的select
权限) -
通过有
admin
权限的用户构建图。 (此处示例图为desens_wiki) -
通过有
admin
权限的用户构建脱敏规则表。-
所有的脱敏规则表一共有下面5列(均为
string
类型),需要严格按照顺序定义,列名无限制:-
图属性名(基于脱敏的属性)
-
基于脱敏属性的值(属性对应的值)
-
用户名
-
需要配置掩码的图属性(需要脱敏的属性)
-
掩码方式
-
-
掩码方式当前提供两类:
-
mark(all),对于需要脱敏的属性,将所有的值置为*。
-
mark(custom,[start_num,end_num]),对于需要脱敏的属性,将以start_num到end_num中间的值置为*。
-
-
这里示例的表为desen_table,所属数据库为desen:
-
图中h和h1用户,和guardian界面创建的用户对应。
-
基于department属性,将h和h1进行分组,h属于department为transwarp的组,h1属于department为abc的组。
-
基于deparment属性,有两个掩码方式:
-
针对属性为url的掩码方式mark(all),表示对于属于不同department的用户,他们查看到的url属性全为*
-
针对属性为url1的掩码方式mark(custom.[0,1]),表示对于属于不同department的用户,他们查看到的url1属性的第0位为*
-
-
-
针对脱敏规则表有两个限制: 限制1:一个用户针对 图属性名 只能有一个 属性对应的值。对应表中则是用户h对department属性只能有一个值transwarp。如果还有用户h对department属性还有另外一个值,那么在执行下面步骤LOAD时会报错。 限制2:针对 图属性名,每个 需要配置掩码的图属性 的 掩码方式 是唯一的。对应表中则是针对department属性,需要脱敏的属性url只有一个规则mark(all),需要脱敏的属性url1只有一个规则mark(custom,[0,1])。同样的,不满足时,在执行下一步时会报错。 |
-
不同用户查询效果。
-
用户h查询看到的效果
-
用户h1查询看到的效果
-
对于用户h2,因为没有在脱敏规则表中,可以查看到所有的值
-
-
如果此时需要将用户h2加入到脱敏体系中,可以将用户根据department属性进行分组。并且切换到TEoC语言,使用load语句重新加载规则。
-
验证修改后的效果:对于用户h2,因为没有在脱敏规则表中,可以查看到所有的值。
-
查看当前加载了脱敏规则表的图。
语法规则如下:
SHOW DESENSITIZATION GRAPHS;
复制该语句调用示例如图:
-
为指定图删除加载脱敏规则表。
DROP DESENSITIZATION GRAPH [GRAPH_NAME];
复制该语句调用示例如图:
在这里仅是将图desens_wiki从脱敏图中删除,它会变成普通图,仍然可以正常查询,只不过此时不会有任何脱敏的效果。