

# Oracle 透明数据加密
<a name="Appendix.Oracle.Options.AdvSecurity"></a>

Amazon RDS 支持 Oracle 透明数据加密 (TDE)，这是 Oracle 企业版中提供的 Oracle 高级安全选项中的功能。该功能在将数据写入到存储之前自动对数据进行加密，并在从存储读取数据时自动对数据进行解密。仅自带许可（BYOL）模式支持此选项。

TDE 在需要加密敏感数据以防第三方获取数据文件和备份的情况下非常有用。当您需要遵守安全相关法规时，TDE 也非常有用。

有关 Oracle 数据库中 TDE 的详细说明超出了本指南的范围。有关信息，请参阅以下 Oracle 数据库资源：
+ Oracle 数据库文档中的 [Introduction to Transparent Data Encryption](https://docs.oracle.com/en/database/oracle/oracle-database/19/asoag/introduction-to-transparent-data-encryption.html#GUID-62AA9447-FDCD-4A4C-B563-32DE04D55952)
+ Oracle 数据库文档中的 [Oracle 高级安全性](https://www.oracle.com/security/database-security/)
+ [Oracle 高级安全透明数据加密最佳实践](https://www.oracle.com/br/a/tech/docs/technical-resources/twp-transparent-data-encryption-bestpractices.pdf)，这是 Oracle 白皮书

有关将 TDE 和 RDS for Oracle 结合使用的更多信息，请参阅以下博客：
+ [Oracle Database Encryption Options on Amazon RDS](https://aws.amazon.com/blogs/apn/oracle-database-encryption-options-on-amazon-rds/)
+ [Migrate a cross-account TDE-enabled Amazon RDS for Oracle DB instance with reduced downtime using AWS DMS](https://aws.amazon.com/blogs/database/migrate-a-cross-account-tde-enabled-amazon-rds-for-oracle-db-instance-with-reduced-downtime-using-aws-dms/)

## TDE 加密模式
<a name="Appendix.Oracle.Options.AdvSecurity.Modes"></a>

Oracle 透明数据加密支持两种加密方式，即 TDE 表空间加密和 TDE 列加密。TDE 表空间加密用于加密整个应用程序表。TDE 列加密用于加密单个包含敏感数据的数据元素。此外，您还可以应用同时使用 TDE 表空间和列加密的混合加密解决方案。

**注意**  
Amazon RDS 为数据库实例管理 Oracle Wallet 和 TDE 主密钥。您无需使用命令 `ALTER SYSTEM set encryption key` 设置加密密钥。

启用 `TDE` 选项之后，可以使用以下命令检查 Oracle Wallet 的状态：

```
SELECT * FROM v$encryption_wallet;
```

要创建加密的表空间，请使用以下命令：

```
CREATE TABLESPACE encrypt_ts ENCRYPTION DEFAULT STORAGE (ENCRYPT);
```

要指定加密算法，请使用以下命令：

```
CREATE TABLESPACE encrypt_ts ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
```

前面用于加密表空间的语句与您在本地 Oracle 数据库上使用的语句相同。

## TDE 选项的限制
<a name="Appendix.Oracle.Options.Timezone.Restrictions"></a>

TDE 选项是持久和永久的。在将您的数据库实例与启用了 TDE 选项的选项组关联后，您无法执行以下操作：
+ 在当前关联的选项组中禁用 `TDE` 选项。
+ 将您的数据库实例与不包含 `TDE` 的选项组相关联。
+ 共享使用 `TDE` 选项的数据库快照。有关共享数据库快照的更多信息，请参阅 [共享 Amazon RDS 的数据库快照](USER_ShareSnapshot.md)。

有关持久和永久选项的更多信息，请参阅[持久性和永久性选项](USER_WorkingWithOptionGroups.md#Overview.OptionGroups.Permanent)。

## 确定您的数据库实例是否使用 TDE
<a name="Appendix.Oracle.Options.AdvSecurity.Querying"></a>

您可能需要确定您的数据库实例是否与启用了 `TDE` 选项的选项组相关联。要查看与数据库实例关联的选项组，请使用 RDS 控制台、AWS CLI 命令 [describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 或 API 操作 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)。

## 添加 TDE 选项
<a name="Appendix.Oracle.Options.AdvSecurity.Add"></a>

要将 `TDE` 选项添加到数据库实例，请完成以下步骤：

1. （推荐）为您的数据库实例拍摄快照。

1. 请执行以下任务之一：
   + 从头开始创建一个新选项组。有关更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。
   + 使用 AWS CLI 或 API 复制现有选项组。有关更多信息，请参阅 [复制选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy)。
   + 重复使用现有的非默认选项组。最佳实践是使用当前未与任何数据库实例或快照关联的选项组。

1. 将新选项添加到您在前面的步骤中创建的选项组。

1. 如果当前与您的数据库实例关联的选项组已启用一些选项，请将这些选项添加到您的新选项组。此策略可以防止在启用新选项时卸载现有选项。

1. 将新选项添加到您的数据库实例。

### 控制台
<a name="Appendix.Oracle.Options.TDE.Console"></a>

**将 TDE 选项添加到一个选项组并将该选项组与您的数据库实例关联**

1. 在 RDS 控制台中，选择**选项组**。

1. 选择要将选项添加到的选项组的名称。

1. 选择**添加选项**。

1. 对于**选项名称**，选择 **TDE**，然后配置选项设置。

1. 选择**添加选项**。
**重要**  
如果在当前已附加到一个或多个数据库实例的选项组中添加 **TDE** 选项，则所有数据库实例自动重新启动时都会发生短暂中断。

   有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 将该选项组与新的或现有的数据库实例关联：
   + 对于新数据库实例，请在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，请修改实例并附加新的选项组以应用选项组。数据库实例不会作为此操作的一部分重启。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### AWS CLI
<a name="Appendix.Oracle.Options.TDE.CLI"></a>

在以下示例中，您使用 AWS CLI [add-option-to-option-group](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) 命令将 `TDE` 选项添加到名为 `myoptiongroup` 的选项组。有关更多信息，请参阅[开始使用：Flink 1.13.2](https://docs.aws.amazon.com/managed-flink/latest/java/earlier.html#getting-started-1-13)。

对于 Linux、macOS 或 Unix：

```
aws rds add-option-to-option-group \
    --option-group-name "myoptiongroup" \
    --options "OptionName=TDE" \
    --apply-immediately
```

对于：Windows

```
aws rds add-option-to-option-group ^
    --option-group-name "myoptiongroup" ^
    --options "OptionName=TDE" ^
    --apply-immediately
```

## 将您的数据复制到不包含 TDE 选项的数据库实例
<a name="Appendix.Oracle.Options.AdvSecurity.Remove"></a>

您无法从数据库实例中删除 TDE 选项或将其与不包括 TDE 选项的选项组关联。要将数据迁移到不包含 TDE 选项的实例，请执行以下操作：

1.  解密数据库实例上的数据。

1.  将数据复制到未与已启用 `TDE` 的选项组关联的新数据库实例。

1.  删除原始数据库实例。

您可以将上一个数据库实例的名称用于新实例。

## 将 TDE 与 Oracle Data Pump 结合使用时的注意事项
<a name="Appendix.Oracle.Options.AdvSecurity.Pump"></a>

可以使用 Oracle Data Pump 导入或导出加密转储文件。Amazon RDS 支持 Oracle Data Pump 的密码加密模式 `(ENCRYPTION_MODE=PASSWORD)`。Amazon RDS 不支持 Oracle Data Pump 的透明加密模式 `(ENCRYPTION_MODE=TRANSPARENT)`。有关更多信息，请参阅 [使用 Oracle Data Pump 导入](Oracle.Procedural.Importing.DataPump.md)。