ALTER MASKING POLICY
功能描述
修改脱敏策略。
注意事项
- 只有poladmin,sysadmin或初始用户才能执行此操作。
- 需要开启安全策略开关,即设置GUC参数“enable_security_policy”=“on”,脱敏策略才可以生效。
语法格式
- 修改策略描述:
1
ALTER MASKING POLICY policy_name COMMENTS policy_comments;
- 修改脱敏方式:
1
ALTER MASKING POLICY policy_name { ADD | REMOVE | MODIFY } masking_actions[, ...];
- 其中masking_actions:
1
masking_function ON LABEL(label_name[, ...])
- 其中masking_function:
1
{ maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking }
- 其中masking_actions:
- 修改脱敏策略生效场景:
1
ALTER MASKING POLICY policy_name MODIFY (filter_group_clause);
- 其中filter_group_clause:
1
FILTER ON { ( FILTER_TYPE ( filter_value [, ... ] ) ) [, ... ] }
- 其中filter_group_clause:
- 移除脱敏策略生效场景,使策略对所用场景生效:
1
ALTER MASKING POLICY policy_name DROP FILTER;
- 修改脱敏策略开启/关闭:
1
ALTER MASKING POLICY policy_name {ENABLE | DISABLE};
参数说明
- policy_name
脱敏策略名称,需要唯一,不可重复。
取值范围:字符串,要符合标识符命名规范。
- policy_comments
需要为脱敏策略添加或修改的描述信息。
- masking_function
指的是预置的八种脱敏方式或者用户自定义的函数,支持模式。
maskall不是预置函数,硬编码在代码中,不支持\df展示。
预置时脱敏方式如下:
{ maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking }
- label_name
资源标签名称。
- FILTER_TYPE
指定脱敏策略的过滤信息,过滤类型包括:IP、ROLES、APP。
- filter_value
指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。
- ENABLE|DISABLE
可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
示例
- 修改策略描述:
--创建一个表tb_for_masking。 gaussdb=# CREATE TABLE tb_for_masking(idx int, col1 text, col2 text, col3 text, col4 text, col5 text, col6 text, col7 text,col8 text); --向表tb_for_masking插入数据。 gaussdb=# INSERT INTO tb_for_masking VALUES(1, '9876543210', 'usr321usr', 'abc@huawei.com', 'abc@huawei.com', '1234-4567-7890-0123', 'abcdef 123456 ui 323 jsfd321 j3k2l3', '4880-9898-4545-2525', 'this is a llt case'); --查看数据。 gaussdb=# SELECT * FROM tb_for_masking; idx | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 -----+------------+-----------+----------------+----------------+---------------------+------------------------------- ------+---------------------+-------------------- 1 | 9876543210 | usr321usr | abc@huawei.com | abc@huawei.com | 1234-4567-7890-0123 | abcdef 123456 ui 323 jsfd321 j 3k2l3 | 4880-9898-4545-2525 | this is a llt case (1 row) --创建资源标签标记敏感列col1。 gaussdb=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1); --创建一个名为maskpol1的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1); --为脱敏策略maskpol1添加描述。 gaussdb=# ALTER MASKING POLICY maskpol1 COMMENTS 'masking policy for tb_for_masking.col1'; --查看脱敏策略maskpol1的描述。 gaussdb=# SELECT * FROM GS_MASKING_POLICY; polname | polcomments | modifydate | polenabled ----------+----------------------------------------+----------------------------+------------ maskpol1 | masking policy for tb_for_masking.col1 | 2023-11-07 16:38:31.607374 | t (1 row)
- 修改脱敏策略:
--创建资源标签标记敏感列col2。 gaussdb=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2); --脱敏策略maskpol1新增randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 ADD randommasking ON LABEL(mask_lb2); --访问tb_for_masking表,col2列触发脱敏策略。 gaussdb=# SELECT col2 FROM tb_for_masking; col2 ------------ 27e8da66cc (1 row) --脱敏策略maskpol1移除randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 REMOVE randommasking ON LABEL(mask_lb2); --访问表tb_for_masking,col2列的数据没有脱敏,说明脱敏方式randommasking失效。 gaussdb=# SELECT col2 FROM tb_for_masking; col2 ----------- usr321usr (1 row) --脱敏策略maskpol1修改为randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 MODIFY randommasking ON LABEL(mask_lb1); --访问tb_for_masking表,col1列触发脱敏策略。 gaussdb=# SELECT col1 FROM tb_for_masking; col1 ------------ 5a03debac1 (1 row)
- 修改脱敏策略生效场景:
--创建dev_mask和bob_mask用户。 gaussdb=# CREATE USER dev_mask PASSWORD '********'; gaussdb=# CREATE USER bob_mask PASSWORD '*********'; --创建资源标签标记敏感列col8。 gaussdb=# CREATE RESOURCE LABEL mask_lb8 ADD COLUMN(tb_for_masking.col8); --创建一个名为maskpol8的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol8 randommasking ON LABEL(mask_lb8) FILTER ON ROLES(dev_mask, bob_mask), APP(gsql), IP('172.31.17.160', '127.0.0.0/24'); --修改脱敏策略maskpol8的过滤信息ROLES。 gaussdb=# ALTER MASKING POLICY maskpol1 MODIFY (FILTER ON ROLES(dev_mask)); --使用dev_mask用户查看tb_for_masking。 gaussdb=# GRANT ALL PRIVILEGES TO dev_mask; --访问tb_for_masking表,col8列触发脱敏策略。 gaussdb=# SELECT col8 FROM tb_for_masking; col8 -------------------- f134e06ef528013b46 (1 row)
- 移除脱敏策略生效场景,使策略对所用场景生效:
gaussdb=# ALTER MASKING POLICY maskpol1 DROP FILTER;
- 禁用脱敏策略:
--禁用脱敏策略maskpol1。 gaussdb=# ALTER MASKING POLICY maskpol1 DISABLE; --查看脱敏策略maskpol1的状态,polenabled字段的值为f,说明该脱敏策略禁用成功。 gaussdb=# SELECT * FROM GS_MASKING_POLICY; polname | polcomments | modifydate | polenabled ----------+-------------+----------------------------+------------ maskpol1 | | 2023-11-07 17:22:54.594111 | f
- 删除数据:
--删除脱敏策略。 gaussdb=# DROP MASKING POLICY maskpol1, maskpol8; --删除资源标签。 gaussdb=# DROP RESOURCE LABEL mask_lb1, mask_lb2, mask_lb8; --删除表tb_for_masking。 gaussdb=# DROP TABLE tb_for_masking; --删除用户dev_mask和bob_mask。 gaussdb=# DROP USER dev_mask, bob_mask;