

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

# 使用 Oracle 数据库透明数据加密 (TDE) AWS CloudHSM
<a name="oracle-tde"></a>

透明数据加密（TDE）用于数据库文件加密。使用 TDE，数据库软件可以先对数据进行加密，然后再将其存储在磁盘上。数据库的表列或表空间中的数据通过表密钥或表空间密钥进行加密。Oracle 数据库软件的某些版本提供 TDE。在 Oracle TDE 中，这些密钥通过 TDE 主加密密钥进行加密。通过将 TDE 主加密密钥存储在 AWS CloudHSM 集群 HSMs 中，可以提高安全性。

![\[将 Oracle TDE 主加密密钥存储在 AWS CloudHSM中。\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/tde-master-key-in-hsm.png)


在此解决方案中，您将使用安装在 Amazon EC2 实例上的 Oracle Database。Oracle 数据库与 [PKCS \$111 的AWS CloudHSM 软件库集成，用于](pkcs11-library.md)将 TDE 主密钥存储 HSMs 在集群中。

**重要**  
 我们建议在 Amazon EC2 实例上安装 Oracle Database。

完成以下步骤以完成 Oracle TDE 与 AWS CloudHSM的集成。

**Topics**
+ [步骤 1：设置先决条件](#oracle-tde-prerequisites)
+ [步骤 2：更新 Oracle 数据库配置](#oracle-tde-configure-database-and-generate-master-key)
+ [步骤 3：生成 Oracle TDE 主加密密钥](#oracle-tde-generate-master-key)

## 步骤 1：设置先决条件
<a name="oracle-tde-prerequisites"></a>

要完成 Oracle TDE 与的集成 AWS CloudHSM，您需要满足以下条件：
+ 至少有一个 HSM 的活动 AWS CloudHSM 集群。
+ 运行 Amazon Linux 操作系统并安装了以下软件的 Amazon EC2 实例：
  +  AWS CloudHSM 客户端和命令行工具。
  + PKCS \$111 的 AWS CloudHSM 软件库。
  + 甲骨文数据库。 AWS CloudHSM 支持 Oracle TDE 集成。客户端软件开发工具包 5.6 及更高版本支持适用于 Oracle Database 19c 的 Oracle TDE。客户端软件开发工具包 3 支持适用于 Oracle Database 11g 和 12c 的 Oracle TDE。
+ 拥有和管理集群 HSMs 中的 TDE 主加密密钥的加密用户 (CU)。

完成以下步骤可设置所有先决组件。

**设置与 Oracle TDE 集成的先决条件 AWS CloudHSM**

1. 完成 [开始使用](getting-started.md) 中的步骤。完成后，您将拥有一个带一个 HSM 的活动集群。您还将拥有一个运行 Amazon Linux 操作系统的 Amazon EC2 实例。还将安装和配置 AWS CloudHSM 客户端和命令行工具。

1. （可选） HSMs 向您的集群添加更多内容。有关更多信息，请参阅 [向集群添加 HS AWS CloudHSM M](add-hsm.md)。

1. 连接到您的 Amazon C2 客户端实例并执行以下操作：

   1. [安装 PKCS \$111 的 AWS CloudHSM 软件库](pkcs11-library-install.md)。

   1. 安装 Oracle Database。有关更多信息，请参阅 [Oracle Database 文档](https://docs.oracle.com/en/database/)。客户端软件开发工具包 5.6 及更高版本支持适用于 Oracle Database 19c 的 Oracle TDE。客户端软件开发工具包 3 支持适用于 Oracle Database 11g 和 12c 的 Oracle TDE。

   1. 使用 cloudhsm\$1mgmt\$1util 命令行工具在您的集群上创建加密用户 (CU)。有关创建 CU 的更多信息，请参阅[如何使用 CMU 管理 HSM 用户](create-users-cmu.md)和[HSM 用户](manage-hsm-users.md)。

## 步骤 2：更新 Oracle 数据库配置
<a name="oracle-tde-configure-database-and-generate-master-key"></a>

要将 Oracle Database 配置更新为使用您的集群中的 HSM 作为*外部安全模块*，请完成以下步骤。有关外部安全模块的信息，请参阅[《Oracle Database 高级安全指南》](https://docs.oracle.com/database/122/ASOAG/introduction-to-transparent-data-encryption.htm)中的*透明数据加密简介*。

**更新 Oracle 配置**

1. 连接到您的 Amazon EC2 客户端实例。这是在其中安装 Oracle Database 的实例。

1. 为名为 `sqlnet.ora` 的文件创建备份副本。有关此文件的位置，请参阅 Oracle 文档。

1. 使用文本编辑器编辑名为 `sqlnet.ora` 的文件。添加以下行。如果文件中的现有行以 `encryption_wallet_location` 开头，请将现有行替换为以下行。

   ```
   encryption_wallet_location=(source=(method=hsm))
   ```

   保存该文件。

1. 运行以下命令创建 Oracle 数据库期望在其中查找 AWS CloudHSM PKCS \$111 软件库库的库文件的目录。

   ```
   sudo mkdir -p /opt/oracle/extapi/64/hsm
   ```

1. 运行以下命令将 PKCS \$111 文件的 AWS CloudHSM 软件库复制到您在上一步中创建的目录中。

   ```
   sudo cp /opt/cloudhsm/lib/libcloudhsm_pkcs11.so /opt/oracle/extapi/64/hsm/
   ```
**注意**  
`/opt/oracle/extapi/64/hsm` 目录只能包含一个库文件。删除该目录中存在的所有其他文件。

1. 运行以下命令更改 `/opt/oracle` 目录的所有权及其包含的所有内容。

   ```
   sudo chown -R oracle:dba /opt/oracle
   ```

1. 启动 Oracle Database。

## 步骤 3：生成 Oracle TDE 主加密密钥
<a name="oracle-tde-generate-master-key"></a>

要在集群 HSMs 中生成 Oracle TDE 主密钥，请完成以下过程中的步骤。

**生成主密钥**

1. 使用以下命令打开 Oracle SQL\$1Plus。在系统提示时，键入安装 Oracle Database 时设置的系统密码。

   ```
   sqlplus / as sysdba
   ```
**注意**  
使用客户端软件开发工具包 3 生成主密钥时，每次都必须设置 `CLOUDHSM_IGNORE_CKA_MODIFIABLE_FALSE` 环境变量。仅在生成主密钥时需要此变量。有关更多信息，请参阅“问题：Oracle 在主密钥生成过程中设置了 PKCS \$111 属性`CKA_MODIFIABLE`”，但在[有关集成第三方应用程序的已知问题](ki-third-party.md)中 HSM 并不支持该属性。

1. 运行 SQL 语句来创建主加密密钥，如以下示例所示。使用与您的 Oracle Database 的版本对应的语句。*<CU user name>*替换为加密用户 (CU) 的用户名。*<password>*替换为 CU 密码。
**重要**  
仅运行以下命令一次。每次运行此命令时，它都会创建一个新的主加密密钥。
   + 对于 Oracle Database 版本 11，运行以下 SQL 语句。

     ```
     SQL> alter system set encryption key identified by "<CU user name>:<password>";
     ```
   + 对于 Oracle Database 版本 12 和版本 19c，运行以下 SQL 语句。

     ```
     SQL> administer key management set key identified by "<CU user name>:<password>";
     ```

   如果响应是 `System altered` 或 `keystore altered`，则您已成功生成并设置 Oracle TDE 的主密钥。

1. (可选) 运行以下命令来验证 *Oracle wallet* 的状态。

   ```
   SQL> select * from v$encryption_wallet;
   ```

   如果 wallet 未打开，请使用下列命令之一将其打开。*<CU user name>*替换为加密用户 (CU) 的名称。*<password>*替换为 CU 密码。
   + 对于 Oracle 11，运行以下命令以打开 wallet。

     ```
     SQL> alter system set encryption wallet open identified by "<CU user name>:<password>";
     ```

     要手动关闭 wallet，请运行以下命令。

     ```
     SQL> alter system set encryption wallet close identified by "<CU user name>:<password>";
     ```
   + 对于 Oracle 12 和 Oracle 19c，运行以下命令以打开 wallet。

     ```
     SQL> administer key management set keystore open identified by "<CU user name>:<password>";
     ```

     要手动关闭 wallet，请运行以下命令。

     ```
     SQL> administer key management set keystore close identified by "<CU user name>:<password>";
     ```