

# 用于管理数据掩蔽策略的过程
<a name="AuroraPostgreSQL.Security.DynamicMasking.Procedures"></a>

您可以使用 `pg_columnmask` 扩展提供的过程来管理掩蔽策略。要创建、修改或删除掩蔽策略，您必须具有以下权限之一：
+ 您要在其上创建 `pg_columnmask` 策略的表的所有者。
+ `rds_superuser` 的成员。
+ 由 `pgcolumnmask.policy_admin_rolname` 参数设置的 `pg_columnmask` 策略管理员角色的成员。

以下命令可创建一个表，该表将在后续章节中使用：

```
CREATE TABLE public.customers (
    id SERIAL PRIMARY KEY,
    name TEXT,
    phone TEXT,
    address TEXT,
    email TEXT
);
```

## CREATE\_MASKING\_POLICY
<a name="AuroraPostgreSQL.Security.DynamicMasking.Procedures.CreateMaskingPolicy"></a>

以下过程为用户表创建新的掩蔽策略：

**语法**

```
create_masking_policy(
    policy_name,
    table_name,
    masking_expressions,
    roles,
    weight)
```

**Arguments**


| 参数 | DataType | 说明 | 
| --- | --- | --- | 
| policy\_name | NAME | 屏蔽策略的名称。对于每个表都必须是唯一的。 | 
| table\_name | REGCLASS | 要应用掩蔽策略的表的限定/非限定名称或 oid。 | 
| masking\_expressions | JSONB | 包含列名称和掩蔽函数对的 JSON 对象。每个键都是一个列名称，其值是要应用于该列的掩蔽表达式。 | 
| roles | NAME[] | 此掩蔽策略应用到的角色。默认值为 PUBLIC。 | 
| weight | INT | 掩蔽策略的权重。当多个策略适用于给定用户的查询时，权重最高（更高的整数）的策略将应用于每个掩蔽的列。<br />默认值为 0。表上的任何两个掩蔽策略都不能具有相同的权重。 | 

**返回类型**：

无

**Example ：创建掩蔽策略来掩蔽 `test_user` 角色的电子邮件列：**  

```
CALL pgcolumnmask.create_masking_policy(
    'customer_mask',
    'public.customers',
    JSON_OBJECT('{
        "email", "pgcolumnmask.mask_email(email)"
    }')::JSONB,
    ARRAY['test_user'],
    100
);
```

## ALTER\_MASKING\_POLICY
<a name="AuroraPostgreSQL.Security.DynamicMasking.Procedures.AlterMaskingPolicy"></a>

此过程可修改现有掩蔽策略。`ALTER_MASKING_POLICY` 可以修改策略掩蔽表达式、要对其应用策略的角色集以及掩蔽策略的权重。忽略其中一个参数时，策略的相应部分将保持不变。

**语法**

```
alter_masking_policy(
    policy_name,
    table_name,
    masking_expressions,
    roles,
    weight)
```

**Arguments**


| 参数 | DataType | 说明 | 
| --- | --- | --- | 
| policy\_name | NAME | 掩蔽策略的现有名称。 | 
| table\_name | REGCLASS | 包含掩蔽策略的表的限定/非限定名称 oid。 | 
| masking\_expressions | JSONB | 包含列名称和掩蔽函数对的新 JSON 对象，否则为 NULL。 | 
| roles | NAME[] | 要应用此掩蔽策略的新角色的列表，否则为 NULL。 | 
| weight | INT | 掩蔽策略的新权重，否则为 NULL。 | 

**返回类型**：

无

**Example ：在不更改其它策略属性的情况下将分析师角色添加到现有掩蔽策略中。**  

```
CALL pgcolumnmask.alter_masking_policy(
    'customer_mask',
    'public.customers',
    NULL,
    ARRAY['test_user', 'analyst'],
    NULL 
);

-- Alter the weight of the policy without altering other details
CALL pgcolumnmask.alter_masking_policy(
    'customer_mask',
    'customers',
    NULL,
    NULL,
    4
);
```

## DROP\_MASKING\_POLICY
<a name="AuroraPostgreSQL.Security.DynamicMasking.Procedures.DropMaskingPolicy"></a>

此过程可移除现有掩蔽策略。

**语法**

```
drop_masking_policy(
        policy_name,
        table_name)
```

**Arguments**


| 参数 | DataType | 说明 | 
| --- | --- | --- | 
| policy\_name | NAME | 掩蔽策略的现有名称。 | 
| table\_name | REGCLASS | 包含掩蔽策略的表的限定/非限定名称 oid。 | 

**返回类型**：

无

**Example ：删除掩蔽策略 customer\_mask**  

```
-- Drop a masking policy
    CALL pgcolumnmask.drop_masking_policy(
        'customer_mask',
        'public.customers',
    );
```