瀚高数据库
目录
文档用途
详细信息
文档用途
数据编辑(Data Redaction)功能是一种动态数据脱敏机制,针对数据查询时的敏感数据进行动态的安全保护,通过设置策略对表的字段进行动态查询时动态修订。
详细信息
1. 介绍
数据编辑(Data Redaction)功能是一种动态数据脱敏机制,针对数据查询时的敏感数据进行动态的安全保护,通过设置策略对表的字段进行动态查询时动态修订。
一个完整的数据编辑策略由三部分组成:数据编辑函数、数据编辑策略应用 SQL命令、相应的权限配置。
- 使用内置的数据编辑函数;
- 通过绑定策略语句将函数与目标数据关联;
- 数据编辑函数及策略仅可通过 SYSSSO 用户创建、修改、删除、禁用、启用、授权操作,普通用户和数据库管理员仅可查看管理视图
在启用数据编辑之前,需打开参数开关:redaction_policy。可通过命令行或直接修改 conf 文件进行修改。命令行格式如下:
alter system set redaction_policy to on;
select pg_reload_conf();
2. 创建编辑策略
语法:
CREATE REDACTION POLICY <name> ON <table_name>
[ ADD [ COLUMN ] <column_name>[,…] USING <funcname_clause> ]
[, ...]
[ FOR ( <expression> ) ]
DISABLE/ENABLE;
解析:
- name:当前策略的名称,
- table_name:当前数据编辑策略作用为哪张表
- column_name:策略应用于哪个列
- funcname_clause:数据编辑函数名称,目前支持的脱敏函数见下文函数列表
- expression:表达式,即对哪些用户执行数据编辑策略。比如 user=’u1’,就是对 u1
- 用户执行数据编辑策略,其他用户不执行
不同测略通过不同的编辑函数实现,如
- redact_bankcard 支持的数据类型有BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对信用卡格式的文本类数据)。示例 '4880-9898-4545-2525' 将会被脱敏为'xxxx-xxxx-xxxx-2525',该函数仅对后 4 位之前的数字进行脱敏。
- redact_emailname 支持的数据类型有 BPCHAR, VARCHAR, NVARCHAR, TEXT (注:仅针对 email 格式的文本类型数据)。示例 '[email protected]' 将会被脱敏为'[email protected]', 对出现第一个'@'之前的文本进行脱敏
- redact_phone 支持的数据类型有 BPCHAR, VARCHAR, NVARCHAR, TEXT (注:仅对电话号码码的文本类型数据)。示例 对电话号码进行脱敏。适用于手机号和固话号。保留前三位和后四位,对中间数字进行脱敏。如“13534556093” 脱敏为“135****6093”
详细策略参考 《瀚高安全版数据库系统V4.5-管理手册.pdf-6.5.6 数据编辑函数列表》
3. 其他操作
修改数据编辑策略
修改当前策略中,列 colname 使用的数据编辑函数
ALTER REDACTION POLICY policyname MODIFY COLUMN colname USING func_name;
删除数据编辑策略
DROP REDACTION POLICY policynamelist
例:
DROP REDACTION POLICY p1; --删除数据编辑策略 p1
4. 使用限制
限制
1、创建策略只能使用 syssso 进行设定,其他用户无权限。
2、一张表中只能创建一个策略
3、一个列只能指定一个数据编辑函数
5. 示例
创建表
\c highgo sysdba
create table test_redaction (id int,name varchar(22),salary int,hiredate timestamp,telephone text);
insert into test_redaction values (1,'aaa',20000,'2022-06-21 14:00:00','15512345678');
授权用户
create user test with password 'Hg#123456'; --创建一个新用户
grant select on test_redaction to test; --授权
开启编辑策略
alter system set redaction_policy to on;
select pg_reload_conf();
show redaction_policy;
创建编辑策略,多列
\c highgo syssso
create redaction policy p1 on test_redaction add column salary using redact_digits,add column telephone using redact_phone for (user = 'test');
使用屏蔽用户查询数据
\c highgo test
select * from test_redaction;
highgo=> select * from test_redaction ;
id | name | salary | hiredate | telephone
----+------+--------+---------------------+-------------
1 | aaa | 0 | 2022-06-21 14:00:00 | 155****5678
(1 row)