
# ALTER MASKING POLICY
#### 功能描述
修改脱敏策略。
#### 注意事项
- 只有poladmin，sysadmin或初始用户才能执行此操作。
- 需要开启安全策略开关，即设置GUC参数"enable_security_policy"="on"，脱敏策略才可以生效。
 
#### 语法格式
- 修改策略描述：
  ```
  ALTER MASKING POLICY policy_name COMMENTS policy_comments;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002527058648.png "点击放大")
  

- 修改脱敏方式：
  ```
  ALTER MASKING POLICY policy_name { ADD | REMOVE | MODIFY } masking_actions[, ...];
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002527058630.png "点击放大")
  - 其中masking_actions:
    ```
    masking_function ON LABEL(label_name[, ...])
    ```
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558058533.png "点击放大")
    
  
  - 其中masking_function：
    ```
    { maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking }
    ```
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558058515.png)
    
   

- 修改脱敏策略生效场景：
  ```
  ALTER MASKING POLICY policy_name MODIFY (filter_group_clause);
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526898702.png "点击放大")
  - 其中filter_group_clause：
    ```
    FILTER ON { ( FILTER_TYPE ( filter_value [, ... ] ) ) [, ... ] }
    ```
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558218477.png "点击放大")
    
   

- 移除脱敏策略生效场景，使策略对所用场景生效：
  ```
  ALTER MASKING POLICY policy_name DROP FILTER;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526898684.png "点击放大")
  

- 修改脱敏策略开启/关闭：
  ```
  ALTER MASKING POLICY policy_name {ENABLE | DISABLE};
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558058545.png "点击放大")
  
 
#### 参数说明
- **policy_name**
  脱敏策略名称，需要唯一，不可重复。
  取值范围：字符串，要符合[标识符命名规范](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0322.html#ZH-CN_TOPIC_0000002559105775__zh-cn_topic_0000002558056023_section14873217506)。
  
- **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;
  ```
  
 
#### 相关链接
[CREATE MASKING POLICY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0551.html#ZH-CN_TOPIC_0000002559105905)，[DROP MASKING POLICY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0600.html#ZH-CN_TOPIC_0000002559105931)
