在 Oracle 数据库 11g 中使用透明数据库加密
在 Oracle 数据库 11g 中使用透明数据库加密
本教程将描述如何使用 Oracle 数据库 11g 的企业管理器数据库控制中的透明数据加密来对磁盘上存储的数据进行加密。
30 分钟
本教程包括下列主题:
将鼠标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:此操作将同时加载所有屏幕截图,因此网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下面的步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
透明数据加密允许您对各个表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动对该数据加密。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密。
由于透明数据加密在数据库之外的一个安全模块(即,钱夹)中存储加密密钥,因此在存储介质或数据文件丢失时,该功能有助于保护存储在介质上的数据。在这类失窃事件中,保护数据是大部分合规管理的要求。使用透明数据加密的优势是,该功能仅需少量的编码工作,并且实施过程快速、简便。
在 Oracle 数据库 11g 中,您可以使用企业管理器来管理透明数据加密。
返回主题列表
开始本教程之前,您应该:
返回主题列表
在本部分内容中,您将更新 sqlnet.ora、创建一个加密钱夹 (ewallet.p12)、打开此钱夹并为 TDE 创建万能密钥。您还将在企业管理器数据库控制中确认 TDE 已启用,并且钱夹已打开。执行以下步骤:
| 1. |
在编辑器中打开 $ORACLE_HOME\network\admin 目录中的 sqlnet.ora 文件。 您需要更新 sqlnet.ora 文件,以包含一个 ENCRYPTED_WALLET_LOCATION 条目。添加以下命令:
ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=<oracle_home>)))
其中,<oracle_home> 是 oracle 主目录的目录位置(例如,/u01/app/oracle/product/11.1.0/db_1)
保存您的更改并关闭文件。
注:可以为加密钱夹选择任何目录,但路径不应指向在数据库安装过程中创建的标准模糊钱夹 (cwallet.sso)。
|
| 2. |
接下来,您需要打开钱夹并创建万能加密密钥。打开一个 SQL*Plus 会话,并执行以下命令:
connect / as sysdba
alter system set key identified by "welcome1";
上面的 alter 命令将执行以下任务:
 |
如果指定的目录中不存在加密钱夹,则系统将创建加密钱夹 (ewallet.p12)、打开此钱夹并创建/重新创建 TDE 的万能密钥。 |
 |
如果指定目录中存在加密钱夹,则系统将打开此钱夹并创建/重新创建 TDE 的万能密钥。 |
注:只有拥有“alter system”权限的用户才能创建万能密钥或打开钱夹。
万能密钥只能创建一次,除非您想要使用新的加密密钥重新加密数据!!!
在后面的部分中,您不希望使用上面提供的命令;您需要打开钱夹(它在您关闭数据库时已经关闭),但不希望创建一个新的万能密钥。于是,使用以下命令:
alter system set wallet open identified by "welcome1";
由于每个表都有各自的加密密钥,因此万能加密密钥是必需的。这些列密钥存储在数据库中。由于钱夹只能存储有限数目的密钥,并且可伸缩性不高,因此使用万能密钥加密列密钥。这样,您便可以拥有所需数量的列密钥,并且钱夹中只存储少量的万能密钥(包括过期密钥,当您某一天从旧的备份磁带解密数据时可能需要它)。
默认情况下,以上命令使用 192 位的高级加密标准 (AES192) 生成一个密钥。也可以使用 3DES,或使用较小或较大的 AES 加密位数。
|
| 3. |
要确认企业管理器数据库控制中启用了透明数据加密,打开浏览器并输入以下 URL。
https://<hostname>:1158/em
以 system 用户身份登录。
|
| 4. |
选择 Server 选项卡。
|
| 5. |
单击 Security 下方的 Transparent Data Encryption。
|
| 6. |
这将打开钱夹并启用透明数据加密。
|
返回主题列表
在本教程中,您将加密 OE.CUSTOMERS 表中的一列。执行以下步骤:
| 1. |
单击 Related Links 下方的 Tables。
|
| 2. |
在 Schema 域中输入 OE,然后单击 Go。
|
| 3. |
选中 CUSTOMERS 前面的单选按钮,然后单击 Edit。
|
| 4. |
您可以指定该表中的所有加密列使用另一种加密算法和密钥种子。单击 Encryption Options。
|
| 5. |
查看选项,然后单击 Continue。
|
| 6. |
选中 Encryption 列中 CREDIT_LIMIT 的复选框,然后单击 Apply。
|
| 7. |
已提交一项作业对列进行加密。单击该作业的链接。
|
| 8. |
作业成功完成。单击 Database 路径式导航栏。
|
返回主题列表
在这一部分中,您将创建一个加密的表空间。执行以下步骤:
| 1. |
在企业管理器数据库控制的 Server 选项卡中,选择 Storage 下方的 Tablespaces。
|
| 2. |
单击 Create。
|
| 3. |
输入 OBE 作为表空间的名称,然后单击 Datafiles 下方的 Add。
|
| 4. |
输入 OBE 作为文件名,然后单击 Continue。
|
| 5. |
通过以加密格式在磁盘上存储数据,表空间加密可以保护表空间内的所有对象。必须存在 Oracle 钱夹,并且该钱夹应处于打开状态。单击 Encryption Options。
|
| 6. |
查看选项,然后单击 Continue。
|
| 7. |
选中 Encryption 复选框,然后单击 OK。
|
| 8. |
您的表空间已成功创建。从表空间列表中选择 OBE 链接。
|
| 9. |
注意,Encryption 选项被设置为 Yes。单击 Database 路径式导航栏。
|
返回主题列表
在这一部分中,您将在加密的表空间中创建一个表,为该表的一列创建一个索引,然后访问该列中的数据以查看所使用的执行计划。执行以下步骤:
| 1. |
打开 SQLDeveloper。在 Linux 中,打开一个终端窗口,并执行以下命令:
cd $ORACLE_HOME/sqldeveloper/sqldeveloper/bin
./sqldeveloper
如果您收到一条消息,询问您是否想移植以前的连接,单击 No。
|
| 2. |
创建一个连接。右键单击 Connections 并选择 New Connection。
|
| 3. |
输入 OE 作为连接名、用户名和口令。输入 orcl 作为 SID,然后单击 Test。
|
| 4. |
测试成功。单击 Connect。
|
| 5. |
首先,您希望为 CUSTOMERS 表创建一个副本。在 SQL 工作表中,输入以下命令,然后单击 Execute。
CREATE TABLE customers_obe AS SELECT * FROM customers
|
| 6. |
现在,您可以将表移进 OBE 表空间(已加密)。展开 Tables,右键单击 CUSTOMERS_OBE,然后依次选择 Storage 和 Move Tablespace。
|
| 7. |
从列表中选择 OBE 表空间,然后单击 Apply。
|
| 8. |
该表已成功移入 OBE 表空间。单击 OK。
|
| 9. |
现在,您可以为 DATE_OF_BIRTH 列创建一个索引。在 SQL 工作表区域中输入以下命令,然后单击 Execute。
CREATE INDEX customers_obe_idx ON customers_obe(date_of_birth)
|
| 10. |
您现在可以从 DATE_OF_BIRTH 列中选择一些数据。在 SQL 工作表区域中输入以下命令,然后单击 Execute。
SELECT cust_last_name, date_of_birth FROM customers_obe
WHERE date_of_birth > '04-FEB-59'
AND date_of_birth < '06-FEB-59'
数据已被选中。要了解所使用的解释计划,单击 Explain Plan 图标。
|
| 11. |
注意,它使用了索引,并进行一次索引(范围扫描)而非整表扫描来检索数据。
|
返回主题列表
如果数据库万能密钥遭到破坏,则可以重新生成该密钥。执行以下步骤:
| 1. |
在企业管理器数据库控制的 Server 选项卡中,选择 Security 下方的 Transparent Data Encryption。
|
| 2. |
单击 Advanced Options 前面的 + 号。
|
| 3. |
单击 Regenerate Master Database Key 下方的 Regenerate。输入 welcome1 作为加密钱夹口令,然后单击 OK。
|
| 4. |
您的数据库万能密钥已重新生成。
|
返回主题列表
您可以通过关闭钱夹来禁用透明数据加密。执行以下步骤:
| 1. |
单击 Close Wallet 复选框,然后单击 OK。
|
| 2. |
钱夹已关闭。要确认是否禁用了透明数据加密,您需要从之前创建的加密列中选择数据。单击 Database 路径式导航栏。
|
| 3. |
滚动至页面底部,单击 Related Links 下方的 SQL Worksheet。
|
| 4. |
在 SQL Command 区域中输入以下命令,然后单击 Execute。
|
| 5. |
由于该列已加密,查询其中的数据需要打开钱夹。保留此窗口的开启状态,并切换回企业管理器。
|
返回主题列表
要重新打开钱夹,执行以下步骤:
| 1. |
在企业管理器数据库控制的 Server 选项卡中,选择 Security 下方的 Transparent Data Encryption。
|
| 2. |
在 Enable Transparent Data Encryption 下方的 Encryption Wallet Password 域中输入口令,然后单击 OK。
|
| 3. |
您的钱夹现在已经打开。
|
| 4. |
切换回 SQL 工作表,重新执行上述查询。请注意,这次列数据会显示在屏幕中。
|
返回主题列表
在本教程中,您学习了如何:
 |
准备用于加密的数据库 |
 |
加密现有表中的一列 |
 |
创建加密的表空间 |
 |
重新生成数据库万能密钥 |
 |
关闭和重新打开钱夹 |
返回主题列表
将鼠标移到该图标上可以隐藏所有屏幕截图
|