

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用数据掩蔽隐藏敏感信息
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking"></a>

要隐藏存储在所迁移的表的一列或多列中的敏感数据，可以利用数据掩蔽转换规则操作。从 3.5.4 版本开始， AWS DMS 允许在表映射中使用数据屏蔽转换规则操作，使您能够在迁移过程中更改一列或多列的内容。 AWS DMS 将修改后的数据加载到目标表中。

AWS Database Migration Service 为数据屏蔽转换规则操作提供了三个选项：
+ 数据掩蔽：数字掩码
+ 数据掩蔽：数字随机化
+ 数据掩蔽：哈希掩码

与其他转换规则类似，可以在复制任务的表映射中配置这些数据掩蔽转换规则操作。规则目标应设置为列级别。

## 使用掩码字符掩盖列数据中的数字
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.Numbers"></a>

“数据掩蔽：数字掩码”转换规则操作允许您使用所指定的单个 ASCII 可打印字符（不包括空字符或空格字符）替换数字，从而掩盖一列或多列中的数值数据。

以下示例使用掩码字符 `'#'` 掩盖 `customer_master` 表 `cust_passport_no` 列中的所有数字，并将掩蔽的数据加载到目标表中：

```
                {
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "cust_schema",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "cust_schema",
                "table-name": "customer_master",
                "column-name": "cust_passport_no"
            },
            "rule-action": "data-masking-digits-mask",
            "value": "#"
        }
    ]
}
```

例如，如果源表`cust_passport_no`中的列包含记录 “C6 BGJ566669 K”，则 AWS DMS 任务会将此数据写入目标表。`"C#BGJ######K"`

## 用随机数字替换列中的数字
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.Random"></a>

转换规则“数据掩蔽：数字随机化”允许您将一列或多列中的每个数字替换为随机数字。在以下示例中， AWS DMS 用随机数替换源表`cust_passport_no``customer_master`列中的每个数字，并将修改后的数据写入目标表：

```
            {
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "cust_schema",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "cust_schema",
                "table-name": "customer_master",
                "column-name": "cust_passport_no"
            },
            "rule-action": "data-masking-digits-randomize"
        }
    ]
}
```

例如，该 AWS DMS 任务会将源表`cust_passport_no`列`"C6BGJ566669K"`中的值转换为目标数据库`"C1BGJ842170K"`并将其写入目标数据库。

## 用哈希值替换列数据
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.Hash"></a>

转换规则“数据掩蔽：哈希掩码”允许您将列数据替换为使用 `SHA256` 算法生成的哈希值。哈希值的长度将始终为 64 个字符，因此目标表列的长度应至少为 64 个字符。或者，您可以向列添加 `change-data-type` 转换规则操作，以增加目标表中列的长度。

以下示例为源表 `customer_master` `cust_passport_no` 列中的数据生成一个 64 个字符长的哈希值，并在增加列长后将转换后的数据加载到目标表：

```
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "cust_schema",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-target": "column",
"object-locator": {
"schema-name": "cust_schema",
"table-name": "customer_master",
"column-name": "cust_passport_no"
},
"rule-action": "change-data-type",
"data-type": {
"type": "string",
"length": "100",
"scale": ""
}
},
{
"rule-type": "transformation",
"rule-id": "3",
"rule-name": "3",
"rule-target": "column",
"object-locator": {
"schema-name": "cust_schema",
"table-name": "customer_master",
"column-name": "cust_passport_no"
},
"rule-action": "data-masking-hash-mask"
}
]
}
```

例如，如果源表`cust_passport_no`的列包含值`“C6BGJ566669K”`，则 t AWS DMS ask 将`“7CB06784764C9030CCC41E25C15339FEB293FFE9B329A72B5FED564E99900C75”`向目标表写入哈希。

## 限制
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.Limitations"></a>
+ 每个数据屏蔽转换规则选项仅支持特定 AWS DMS 数据类型：
  + 数据掩蔽：数字掩码支持 `WSTRING` 和 `STRING` 数据类型的列。
  + 数据掩蔽：数字随机化支持 `WSTRING, STRING; NUMERIC, INT1, INT2, INT4, and INT8 ` 数据类型及其对应的无符号数据类型的列。
  + 数据掩蔽：哈希掩码支持 `WSTRING` 和 `STRING` 数据类型的列。

  要详细了解如何将 AWS DMS 数据类型映射到源引擎的数据类型，请参阅源引擎与数据类型的 AWS DMS 数据类型映射。请参阅 [Oracle 的源数据类型](CHAP_Source.Oracle.md#CHAP_Source.Oracle.DataTypes)、[SQL Server 的源数据类型](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.DataTypes)、[PostgreSQL 的源数据类型](CHAP_Source.PostgreSQL.md#CHAP_Source-PostgreSQL-DataTypes) 和 [MySQL 的源数据类型](CHAP_Source.MySQL.md#CHAP_Source.MySQL.DataTypes) 的源数据类型。
+ 对数据类型不兼容的列使用数据掩蔽规则操作会导致 DMS 任务出错。要 DataMaskingErrorPolicy 指定错误处理行为，请参阅 DMS 任务设置。有关 `DataMaskingErrorPolicy`的更多信息，请参阅[错误处理任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md)。
+ 如果您计划使用的掩码选项不支持您的源列类型，则可以添加 change-data-type转换规则操作，将列的数据类型更改为兼容类型。`change-data-type` 转换的 `rule-id` 数字应该是一个比掩码转换的规则 ID 更小的数字，以便在掩蔽之前进行数据类型更改。
+ 建议对主键/唯一键/外键列使用“数据掩蔽：哈希掩码”操作，因为生成的哈希值将是唯一且一致的。其他两个掩码选项不能保证唯一性。
+ 虽然“数据掩蔽：数字掩码”和“数据掩蔽：数字随机化”仅影响列数据中的数字，而不影响数据长度，但“数据掩蔽：哈希掩码”会修改整列，数据长度更改为 64 个字符。因此，应相应地创建要创建的目标表或为被屏蔽的列添加 change-data-type转换规则。
+ 在 AWS DMS中，指定了数据掩蔽转换规则操作的列将从数据验证中排除。如果主键/唯一键列被掩码，则此表的数据验证将不会运行；此类表的验证状态将显示为 `No Primary key`。