数据仓库服务 GAUSSDB(DWS)-CREATE REDACTION POLICY:示例

时间:2024-11-28 17:38:57

示例

对指定用户创建脱敏策略。

  1. 创建用户alice和matu:
    1
    2
    CREATE ROLE alice PASSWORD '{password}';
    CREATE ROLE matu PASSWORD '{password}';
    
  2. 用户alice创建表对象emp并插入数据:
    1
    2
    CREATE TABLE emp(id int, name varchar(20), salary NUMERIC(10,2));
    INSERT INTO emp VALUES(1, 'July', 1230.10), (2, 'David', 999.99);
    
  3. 用户alice为表对象emp创建脱敏策略mask_emp,字段salary对用户matu不可见:
    1
    CREATE REDACTION POLICY mask_emp ON emp WHEN(current_user = 'matu') ADD COLUMN salary WITH mask_full(salary);
    
  4. 用户alice授予用户matu表emp的SELECT权限:
    1
    GRANT SELECT ON emp TO matu;
    
  5. 切至用户matu:
    1
    SET ROLE matu PASSWORD '{password}';
    
  6. 查询表emp,字段salary数据已脱敏:
    1
    SELECT * FROM emp;
    

对角色创建脱敏策略。

  1. 创建角色redact_role:
    1
    CREATE ROLE redact_role PASSWORD '{password}';
    
  2. 将用户matu,alice加入角色redact_role:
    1
    GRANT redact_role to matu,alice;
    
  3. 管理员用户创建表对象emp1并插入数据:
    1
    2
    CREATE TABLE emp1(id int, name varchar(20), salary NUMERIC(10,2)); 
    INSERT INTO emp1 VALUES(3, 'Rose', 2230.20), (4, 'Jack', 899.88);  
    
  4. 管理员用户为表对象emp1创建脱敏策略mask_emp1,使字段salary对角色redact_role不可见。
    1
    CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN(pg_has_role(current_user, 'redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary);
    

    若不指定用户,默认为当前用户current_user:

    1
    CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN (pg_has_role('redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary);
    
  5. 管理员用户授予用户matu表emp1的SELECT权限:
    1
    GRANT SELECT ON emp1 TO matu;
    
  6. 切换至用户matu:
    1
    SET ROLE matu PASSWORD '{password}';
    
  7. 查询表emp,字段salary数据已脱敏。
    1
    SELECT * FROM emp1;
    
support.huaweicloud.com/sqlreference-830-dws/dws_06_0168.html