

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 管理資料遮罩政策的程序
<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,
    predicate_allow_list)
```

**注意**  
`predicate_allow_list` 引數需要`pg_columnmask`擴充功能 1.1 版或更新版本，可在 Aurora PostgreSQL 16.11 版和更新版本，以及 17.7 版和更新版本中使用。若要更新擴充功能，請執行 `ALTER EXTENSION pg_columnmask UPDATE;`。如需詳細資訊，請參閱 PostgreSQL 文件中的 [ALTER EXTENSION](https://www.postgresql.org/docs/current/sql-alterextension.html)。

**Arguments (引數)**


| 參數 | Datatype | 說明 | 
| --- | --- | --- | 
| policy\_name | NAME | 遮罩政策的名稱。每個資料表必須是唯一的。 | 
| table\_name | REGCLASS | 要套用遮罩政策之資料表的合格/不合格名稱或 oid。 | 
| masking\_expressions | JSONB | 包含資料欄名稱和遮罩函數對的 JSON 物件。每個索引鍵都是資料欄名稱，其值是要套用至該資料欄的遮罩表達式。 | 
| roles | NAME【】 | 此遮罩政策適用的角色。預設為 PUBLIC。 | 
| weight | INT | 遮罩政策的權重。當多個政策適用於指定使用者的查詢時，具有最高權重 （較高的整數） 的政策將套用至每個遮罩的資料欄。<br />預設值為 0。資料表上的兩個遮罩政策不能具有相同的權重。 | 
| predicate\_allow\_list | NAME【】 | 即使被此政策遮罩，也可能在述詞、聯結條件和其他篩選條件表達式中參考的資料欄名稱陣列。如果沒有此設定，遮罩資料欄上的述詞會引發錯誤。當資料欄在允許清單中時，述詞會針對遮罩的值執行。 | 

**傳回類型**

無

**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,
    predicate_allow_list)
```

**注意**  
`predicate_allow_list` 引數需要`pg_columnmask`擴充功能 1.1 版或更新版本，可在 Aurora PostgreSQL 16.11 版和更新版本，以及 17.7 版和更新版本中使用。若要更新擴充功能，請執行 `ALTER EXTENSION pg_columnmask UPDATE;`。如需詳細資訊，請參閱 PostgreSQL 文件中的 [ALTER EXTENSION](https://www.postgresql.org/docs/current/sql-alterextension.html)。

**Arguments (引數)**


| 參數 | Datatype | 說明 | 
| --- | --- | --- | 
| policy\_name | NAME | 遮罩政策的現有名稱。 | 
| table\_name | REGCLASS | 包含遮罩政策之資料表的合格/不合格名稱 oid。 | 
| masking\_expressions | JSONB | 包含資料欄名稱和遮罩函數對或 NULL 的新 JSON 物件。 | 
| roles | NAME【】 | 套用此遮罩政策的新角色清單，否則為 NULL。 | 
| weight | INT | 遮罩政策或 NULL 的新權重。 | 
| predicate\_allow\_list | NAME【】 | 述詞和篩選條件表達式中允許的新資料欄名稱陣列，或 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'
);
```

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

此程序會重新命名現有的遮罩政策。

**語法**

```
rename_masking_policy(
    policy_name,
    table_name,
    new_policy_name)
```

**Arguments (引數)**


| 參數 | Datatype | 說明 | 
| --- | --- | --- | 
| policy\_name | NAME | 遮罩政策的目前名稱。 | 
| table\_name | REGCLASS | 包含遮罩政策之資料表的合格/不合格名稱或 oid。 | 
| new\_policy\_name | NAME | 遮罩政策的新名稱。每個資料表必須是唯一的。 | 

## 管理檢視
<a name="AuroraPostgreSQL.Security.DynamicMasking.AdminViews"></a>

`pgcolumnmask.ddm_policies` 檢視會在您擁有或具有管理權限的資料表上顯示遮罩政策。


| 欄名稱 | 資料類型 | 說明 | 
| --- | --- | --- | 
| 結構描述名稱 | NAME | 套用政策之資料表的結構描述。 | 
| 資料表名稱 | NAME | 政策套用的資料表名稱。 | 
| policyname | NAME | 遮罩政策的名稱。 | 
| roles | TEXT【】 | 政策套用到的角色。 | 
| masked\_columns | TEXT【】 | 政策遮罩的資料欄。 | 
| masking\_functions | TEXT【】 | 套用至遮罩資料欄的遮罩函數。 | 
| Weight | INT | 政策的權重。 | 
| predicate\_allow\_list | NAME【】 | 述詞和篩選條件表達式中允許的欄名稱陣列，即使被政策遮罩也一樣。 | 

## 遮罩政策中的引號識別符
<a name="AuroraPostgreSQL.Security.DynamicMasking.EscapeIdentifiers"></a>

混合大小寫或預留單字識別符需要在政策名稱、結構描述、資料表、資料欄和角色引數中逸出雙引號。在 JSON 字串內，使用反斜線逸出雙引號。角色名稱必須完全相符，`pg_roles`包括大小寫。

**Example 範例 – 引號和未引號的識別符**  
小寫識別符 （不需要引號）：  

```
CALL pgcolumnmask.create_masking_policy(
    'ssn_policy',
    'public.employees',
    JSON_BUILD_OBJECT('ssn', 'public.mask_ssn(ssn)')::JSONB,
    ARRAY['analyst'],
    10
);
```
具有混合大小寫識別符的相同政策 （需要引用）：  

```
CALL pgcolumnmask.create_masking_policy(
    '"SSN_Policy"',
    '"Public"."Employees"',
    JSON_BUILD_OBJECT('"SSN"', 'public."Mask_SSN"("SSN")')::JSONB,
    ARRAY['"Analyst"'],
    10
);
```
中的兩個政策`pgcolumnmask.ddm_policies`：  

```
SELECT schemaname, tablename, policyname, roles, weight
    FROM pgcolumnmask.ddm_policies
    ORDER BY tablename, weight;
 schemaname | tablename | policyname | roles     | weight
------------+-----------+------------+-----------+--------
 Public     | Employees | SSN_Policy | {Analyst} |     10
 public     | employees | ssn_policy | {analyst} |     10
```

**注意**  
在 Aurora PostgreSQL 16.11 和 17.7 之前的版本中，延伸模組會自動引用角色名稱。在 Aurora PostgreSQL 16.11 和 17.7 及更新版本中，只有在以雙引號明確括住時，才會引用角色名稱。