在 Oracle Database 11g 中使用透明数据库加密

本教程介绍如何使用 Oracle Database 11g 的 Enterprise Manager Database Control 中的透明数据加密对磁盘上存储的数据进行加密。

30 分钟

本教程包括下列主题:

将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注意:此外,您还可以在下面的步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。

透明数据加密允许您对各个表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动对该数据加密。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密。

由于透明数据加密在数据库之外的一个安全模块(即,钱夹)中存储加密密钥,因此在存储介质或数据文件丢失时,该功能有助于保护存储在介质上的数据。在这类失窃事件中,保护数据是大部分合规管理的要求。使用透明数据加密的优势是,该功能仅需少量的编码工作,并且实施过程快速、简便。

在 Oracle Database 11g 中,您可以使用 Enterprise Manager 管理透明数据加密。

开始本教程之前,您应该:

1.

通过完成在 Linux 上安装 Oracle Database 11g 第 2 版教程来安装数据库。

返回主题列表

在本节中,您将更改钱夹的位置,并使用 Enterprise Manager Database Control 打开它。执行以下步骤:

1.

打开浏览器,输入以下 URL。

https://<主机名>:1158/em

system 用户身份登录。

2.

选择 Server 选项卡。

3.

单击 Security 下方的 Transparent Data Encryption

4.

建议您永远不要将钱夹和数据库存储在同一备份中,因为使用数据库备份及其关联的钱夹的任何人都可以启动对钱夹口令的强行攻击,从而获得对保护数据的访问。基于这种考虑,我们将钱夹的位置设置为一个通常不会备份数据库及其关联的二进制文件的目录。单击 Change

5.

因为您要更改到的目录尚不存在,您需要创建它。打开一个终端窗口,执行以下命令创建该目录。同时注意目录位置:

pwd
mkdir wallets
chmod 750 wallets

ls -ld wallets




注意:在生产实现中,最好将您的钱包放在系统管理员指定的非用户目录中。

6.

返回 Enterprise Manager 中。输入您的 Oracle 软件所有者的 Username 和 Password,然后单击 Login

7.

将之前创建的目录的位置输入到 Encryption Wallet Directory 域,然后单击 OK

8.

更改已经完成,但 Enbterprise Manager 不会立刻获取这一更改。要快速实现这一变更,从 Enterprise Manager 注销后再次登录进去。单击 Logout

9.

单击 Login

10.

system 用户身份再次登录。

11.

选择 Server 选项卡。

12.

单击 Security 下方的 Transparent Data Encryption

13.

注意,此时目录名称已经更改。输入保护钱夹的强口令,然后单击 OK。或者,只让安全数据库管理员知道该口令,从而实现职责分离。在任何情况下,必须记住该口令(或安全地记录下来),因为如果丢失则无法找回。

14.

已经创建了钱夹,并且现在已经打开。

返回主题列表

在本教程中,您将加密 OE.CUSTOMERS 表中的一列。执行以下步骤:

1.

滚动至 Enterprise Manager 页面的底部,在 Related Links 部分中单击 Tables

2.

在 Schema 域中输入 OE,然后单击 Go

3.

选中 CUSTOMERS 前面的单选按钮,然后单击 Edit

4.

您可以指定该表中的所有加密列使用另一种加密算法和密钥种子。单击 Encryption Options

5.

查看选项,然后单击 Continue

6.

选中 Encryption 列中 CREDIT_LIMIT 的复选框,然后单击 Apply

7.

已提交一项作业对列进行加密。单击该作业的链接。

8.

作业成功完成。单击 Database 路径式导航栏。

返回主题列表

在本节中,您将创建一个加密的表空间。执行以下步骤:

1.

在 Enterprise Manager Database Control 的 Server 选项卡中,选择 Storage 下方的 Tablespaces

2.

单击 Create

3.

输入 TDE 作为表空间的名称,然后单击 Datafiles 下方的 Add

4.

输入 TDE 作为 File Name,然后单击 Continue

5.

通过以加密格式在磁盘上存储数据,表空间加密可以保护表空间内的所有对象。必须存在 Oracle 钱夹,并且该钱夹应处于打开状态。单击 Encryption Options

6.

钱夹处于打开状态。选择您的首选加密算法,然后单击 Continue

7.

选中 Encryption 复选框,然后单击 OK

8.

您的表空间已成功创建。从 Tablespaces 列表中选择 TDE 链接。

9.

注意,Encryption 选项设置为 Yes。单击 Database 路径式导航栏。

返回主题列表

在本节中,您将在加密的表空间中创建一个表,为该表的一列创建一个索引,然后访问该列中的数据以查看所使用的执行计划。执行以下步骤:

1.

打开一个终端窗口,执行以下命令在您新创建的加密表空间中创建客户表的副本:

sqlplus / as sysdba

CREATE TABLE oe.customers_tde TABLESPACE tde
AS SELECT * FROM oe.customers;

2.

执行以下命令在新创建的表空间上创建索引。该索引也将驻留在加密的表空间中。

CREATE INDEX oe.customers_tde_idx ON oe.customers_tde(date_of_birth)
TABLESPACE tde;

3.

现在,我们将通过要使用加密索引的搜索条件查询加密的表。执行以下命令处理该查询并显示相关的执行计划:

set linesize 120

set autotrace on

SELECT cust_last_name, date_of_birth FROM oe.customers_tde
WHERE date_of_birth > '04-FEB-59'
AND date_of_birth < '06-FEB-59';

注意,该查询透明地使用加密的表和索引,就像表空间未加密一样。

4.

退出 sqlplus,导航到包含加密的表空间的目录。

5.

原始(未加密的)客户表位于 EXAMPLE 表空间中。能够访问数据库文件的任何人都可以通过直接查询数据库文件而规避数据库安全性。执行以下 Linux 命令分析数据文件并返回有关 Pacino 先生的一些信息。

strings example01.dbf | grep -A 10 -B 10 Pacino |  head -20 

6.

现在,在加密的表空间中查找 Pacino。您会看到什么都未返回。使用以下命令:

strings TDE | grep Pacino

7.

执行以下命令,看看 TDE 数据文件中是否存在任何人可读的信息:

strings TDE | head -20

输出证实该文件已加密。

返回主题列表

如果数据库主密钥遭到破坏,则可以重新生成该密钥。这个过程只能重新生成用于加密列的主密钥;不能重新键入用于加密表空间的主密钥。如果您需要重新生成用于加密表空间的主密钥,则需要创建一个新的加密表空间,然后将全部内容从原来的加密表空间移到新加密表空间。执行以下步骤:

1.

在 Enterprise Manager Database Control 的 Server 选项卡中,选择 Security 下方的 Transparent Data Encryption。 .

2.

单击 Advanced Options 前面的 + 号。

3.

单击 Regenerate Master Database Key 下方的 Regenerate。输入最初创建钱包时使用的强口令;旧主密钥及新主密钥都与钱包口令毫不相关;单击 OK

4.

您的数据库主密钥已重新生成。

返回主题列表

执行以下步骤删除您在本教程中创建的对象和设置:

1.

在终端窗口中,执行以下命令:

sqlplus / as sysdba

ALTER TABLE oe.customers MODIFY (credit_limit DECRYPT);

DROP TABLESPACE tde INCLUDING CONTENTS AND DATAFILES;

exit

.

2.

返回 Enterprise Manager Transparent Data Encryption 页面,选中 Close Wallet 复选框并单击 OK

.

3.

现在,钱夹关闭,透明数据加密被禁用

.

4.

回到终端窗口,执行下面一系列命令删除钱包及包含钱包的目录:

cd /home/oracle/wallets

rm ewallet.p12

cd ..

rmdir wallets

.

返回主题列表

在本教程中,您学习了如何:

准备用于加密的数据库
加密现有表中的一列
创建并使用加密的表空间
重新生成数据库主密钥

返回主题列表

将鼠标移到该图标上可以隐藏所有屏幕截图