更新时间:2024-03-06 GMT+08:00

ALTER REDACTION POLICY

功能描述

修改应用在指定表的脱敏策略。

注意事项

只有待修改脱敏策略所应用表对象的属主才有修改脱敏策略的权限。

语法格式

  • 修改脱敏策略生效表达式。
    1
    ALTER REDACTION POLICY policy_name ON table_name WHEN (new_when_expression);
    
  • 使脱敏策略生效或失效。
    1
    ALTER REDACTION POLICY policy_name ON table_name ENABLE | DISABLE;
    
  • 重命名脱敏策略。
    1
    ALTER REDACTION POLICY policy_name ON table_name RENAME TO new_policy_name;
    
  • 修改脱敏列,包括新增、修改、删除脱敏列。
    1
    2
    ALTER REDACTION POLICY policy_name ON table_name 
        action;
    

    其中,脱敏列操作action可以是以下子句之一:

    1
    2
    3
    ADD COLUMN column_name WITH function_name ( arguments )
      | MODIFY COLUMN column_name WITH function_name ( arguments )
      | DROP COLUMN column_name
    

参数说明

  • policy_name

    待修改的脱敏策略名。

  • table_name

    待修改的脱敏策略应用的表对象名。

  • new_when_expression

    脱敏策略新的生效表达式。

  • ENABLE | DISABLE

    当前脱敏策略是否生效。

    • ENABLE

      使之前失效的表对象的脱敏策略重新生效。

    • DISABLE

      使当前应用在表对象的脱敏策略失效。

  • new_policy_name

    新的脱敏策略名。

  • column_name

    脱敏表对象的列字段名。

    如果新增脱敏列,则指定列字段尚未绑定任何脱敏函数。

    如果修改脱敏列,则指定列字段为已存在的脱敏列。

    如果删除脱敏列,则指定列字段为已存在的脱敏列。

  • function_name

    脱敏函数名。

  • arguments

    脱敏函数的参数列表。

    • MASK_NONE,表示不进行任何脱敏处理。
    • MASK_FULL,表示全脱敏成固定值。
    • MASK_PARTIAL,表示按指定的字符类型,数值类型或时间类型进行部分脱敏处理。

示例

创建用户test_role和示例表emp并插入数据:
1
CREATE ROLE test_role PASSWORD '{Password}';
1
2
3
DROP TABLE IF EXISTS emp;
CREATE TABLE emp(id int, name varchar(20), salary NUMERIC(10,2));
INSERT INTO emp VALUES(1, 'July', 1230.10), (2, 'David', 999.99);
为表对象emp创建脱敏策略mask_emp,字段salary对用户test_role不可见:
1
CREATE REDACTION POLICY mask_emp ON emp WHEN(current_user = 'test_role') ADD COLUMN salary WITH mask_full(salary);

修改脱敏策略生效表达式,使其对指定角色生效(若不指定用户,默认对当前用户生效):

1
2
ALTER REDACTION POLICY mask_emp ON emp WHEN (pg_has_role(current_user, 'redact_role', 'member'));
ALTER REDACTION POLICY mask_emp ON emp WHEN (pg_has_role('redact_role', 'member'));

修改脱敏策略生效表达式,使其对所有用户均生效:

1
ALTER REDACTION POLICY mask_emp ON emp WHEN (1=1);

修改脱敏策略,使其失效:

1
ALTER REDACTION POLICY mask_emp ON emp DISABLE;

重新使脱敏策略生效:

1
ALTER REDACTION POLICY mask_emp ON emp ENABLE;

重命名脱敏策略为mask_emp_new:

1
ALTER REDACTION POLICY mask_emp ON emp RENAME TO mask_emp_new;

新增脱敏列:

1
ALTER REDACTION POLICY mask_emp_new ON emp ADD COLUMN name WITH mask_partial(name, '*', 1, length(name));

修改脱敏列name,采用脱敏函数MASK_FULL对name字段数据全脱敏:

1
ALTER REDACTION POLICY mask_emp_new ON emp MODIFY COLUMN name WITH mask_full(name);

删除已存在的脱敏列:

1
ALTER REDACTION POLICY mask_emp_new ON emp DROP COLUMN name;