更新时间:2025-07-08 GMT+08:00
分享

ALTER REDACTION POLICY

功能描述

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

注意事项

只有待修改脱敏策略所应用表对象的属主和被授予gs_redaction_policy预置角色的用户才有修改脱敏策略的权限。

语法格式

  • 修改脱敏策略生效表达式。
    1
    ALTER REDACTION POLICY policy_name ON table_name WHEN (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
    [INHERIT] ADD COLUMN column_name WITH redaction_function_name ( [ argument [, ...] ] )
      | [INHERIT] MODIFY COLUMN column_name WITH redaction_function_name ( [ argument [, ...] ] )
      | DROP COLUMN column_name
    

参数说明

表1 ALTER REDACTION POLICY参数说明

参数

描述

取值范围

policy_name

待修改的脱敏策略名。

已存在的脱敏策略名。

table_name

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

已存在的表名。

when_expression

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

-

ENABLE | DISABLE

当前脱敏策略是否生效。

  • ENABLE,使之前失效的表对象的脱敏策略重新生效。
  • DISABLE,使当前应用在表对象的脱敏策略失效。

-

new_policy_name

新的脱敏策略名。

字符串,需符合标识符命名规范

column_name

脱敏表对象的列字段名。

  • 如果新增脱敏列,则指定列字段尚未绑定任何脱敏函数。
  • 如果修改脱敏列,则指定列字段为已存在的脱敏列。
  • 如果删除脱敏列,则指定列字段为已存在的脱敏列。

-

redaction_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;

相关文档