CREATE MASKING POLICY
功能描述
创建脱敏策略。
注意事项
- 只有poladmin,sysadmin或初始用户能执行此操作。
- 需要开启安全策略开关,即设置GUC参数“enable_security_policy”=“on”,脱敏策略才可以生效。
在使用DATABASE LINK功能的场景下,客户端发起的DATABASE LINK请求,实际的发送方是服务端,发送端IP地址等相关的属性将是服务端的值。详情见DATABASE LINK。
语法格式
1
|
CREATE MASKING POLICY policy_name masking_clause[, ...] [ policy_filter_clause ] [ENABLE | DISABLE]; |
- policy_filter_clause:
1
FILTER ON { FILTER_TYPE ( filter_value [, ... ] ) } [, ...]
- FILTER_TYPE:
1
{ APP | ROLES | IP }
参数说明
- policy_name
脱敏策略名称,需要唯一,不可重复。
取值范围:字符串,要符合标识符命名规范,且最大长度不超过63个字符。若超过63个字符,数据库会截断并保留前63个字符当作脱敏策略名称。当脱敏策略名称中包含大写字母时,数据库会自动转换为小写字母,如果需要创建包含大写字母的脱敏策略名称,则需要使用双引号括起来。
标识符需要为小写字母(a~z)、大写字母(A~Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。
- label_name
资源标签名称。
- masking_clause
指出使用何种脱敏函数对被label_name标签标记的数据库资源进行脱敏,支持用schema.function的方式指定脱敏函数。
- policy_filter
指出该脱敏策略对何种身份的用户生效,若为空表示对所有用户生效。
- FILTER_TYPE
描述策略过滤的条件类型,包括IP | APP | ROLES。
- filter_value
指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。
- ENABLE|DISABLE
可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
示例
- 创建使用maskall的脱敏策略(将字符串类型的所有值脱敏为x,其它几种类型显示为该类型的默认值)。
--创建一个表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); --访问tb_for_masking表,col1列触发脱敏策略。 gaussdb=# SELECT col1 FROM tb_for_masking; col1 ------------ xxxxxxxxxx (1 row)
- 创建使用randommasking的脱敏策略(将字符串类型的值脱敏为随机数字,并且每次都是不同的值)。
--创建资源标签标记敏感列col2。 gaussdb=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2); --创建一个名为maskpol2的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol2 randommasking ON LABEL(mask_lb2); --访问tb_for_masking表,col2列触发脱敏策略。 gaussdb=# SELECT col2 FROM tb_for_masking; col2 ----------- 0e8612d9a (1 row)
- 创建使用basicemailmasking的脱敏策略(将字符串类型邮箱格式值@符号之前的所有数据内容设为x)。
--创建资源标签标记敏感列col3。 gaussdb=# CREATE RESOURCE LABEL mask_lb3 ADD COLUMN(tb_for_masking.col3); --创建一个名为maskpol3的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol3 basicemailmasking ON LABEL(mask_lb3); --访问tb_for_masking表,col3列触发脱敏策略。 gaussdb=# SELECT col3 FROM tb_for_masking; col3 ---------------- xxx@huawei.com (1 row)
- 创建使用fullemailmasking的脱敏策略(将字符串类型邮箱格式值仅保留@符号和邮箱dot结尾,其余全部设为x)。
--创建资源标签标记敏感列col4。 gaussdb=# CREATE RESOURCE LABEL mask_lb4 ADD COLUMN(tb_for_masking.col4); --创建一个名为maskpol4的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol4 fullemailmasking ON LABEL(mask_lb4); --访问tb_for_masking表,col4列触发脱敏策略。 gaussdb=# SELECT col4 FROM tb_for_masking; col4 ---------------- xxx@xxxxxx.com (1 row)
- 创建使用creditcardmasking的脱敏策略(将字符串类型的值保留连接符号-和末尾4位数字,其余全部设为x)。
--创建资源标签标记敏感列col5。 gaussdb=# CREATE RESOURCE LABEL mask_lb5 ADD COLUMN(tb_for_masking.col5); --创建一个名为maskpol5的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol5 creditcardmasking ON LABEL(mask_lb5); --访问tb_for_masking表,col5列触发脱敏策略。 gaussdb=# SELECT col5 FROM tb_for_masking; col5 --------------------- xxxx-xxxx-xxxx-0123 (1 row)
- 创建使用shufflemasking的脱敏策略(将字符串类型的值交换位置,打乱顺序)。
--创建资源标签标记敏感列col6。 gaussdb=# CREATE RESOURCE LABEL mask_lb6 ADD COLUMN(tb_for_masking.col6); --创建一个名为maskpol6的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol6 shufflemasking ON LABEL(mask_lb6); --访问tb_for_masking表,col6列触发脱敏策略。 gaussdb=# SELECT col6 FROM tb_for_masking; col6 ------------------------------------- 2 b6jusfd54c3312 13d23lk3jf3 2eai (1 row)
- 创建使用regexpmasking的脱敏策略(将字符串类型的值进行正则表达式脱敏)。
--创建资源标签标记敏感列col7。 gaussdb=# CREATE RESOURCE LABEL mask_lb7 ADD COLUMN(tb_for_masking.col7); --创建一个名为maskpol7的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol7 regexpmasking('[\d+]','*',2, 9) ON LABEL(mask_lb7); --访问tb_for_masking表,col7列触发脱敏策略。 gaussdb=# SELECT col7 FROM tb_for_masking; col7 --------------------- 48**-****-*545-2525 (1 row)
- 创建仅对用户dev_mask和bob_mask,客户端工具为gsql,IP地址为'172.31.17.160', '127.0.0.0/24'场景下生效的脱敏策略。
--创建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'); --访问tb_for_masking表,col8列触发脱敏策略。 gaussdb=# SELECT * FROM tb_for_masking; --使用gsql工具,IP地址为'172.31.17.160',用户dev_mask查看tb_for_masking。 gaussdb=# GRANT ALL PRIVILEGES TO dev_mask; --使用maskpol8脱敏,结果随机,每次不同。 gaussdb=# SELECT col8 FROM tb_for_masking; col8 -------------------- cf32a9aa427f219ab0 (1 row) gaussdb=# SELECT col8 FROM tb_for_masking; col8 -------------------- 13efa056dda1e1a474 (1 row)
- 删除数据。
--删除脱敏策略。 gaussdb=# DROP MASKING POLICY maskpol1, maskpol2, maskpol3, maskpol4, maskpol5, maskpol6, maskpol7, maskpol8; --删除资源标签。 gaussdb=# DROP RESOURCE LABEL mask_lb1, mask_lb2, mask_lb3, mask_lb4, mask_lb5, mask_lb6, mask_lb7, mask_lb8; --删除表tb_for_masking。 gaussdb=# DROP TABLE tb_for_masking; --删除用户dev_mask和bob_mask。 gaussdb=# DROP USER dev_mask, bob_mask;