首页 > 新闻系统 > 编程天地 > 文章正文

Oracle 10G:透明数据加密技术(TDE)

2008-03-24 15:11:19 来源:IT专家网 作者:zy 点击:
在Oracle的最新版本10g R2中,出现最及时的技术应该是透明数据加密技术(Transparent Data Encryption,TDE)。

Oracle的最新版本10g R2中,出现最及时的技术应该是透明数据加密技术(Transparent Data EncryptionTDE)。

  TDE用来对数据加密,通常 SQL 执行的应用程序逻辑不需要进行更改,仍能正常运行。 换言之,应用程序可以使用同一语法将数据插入到应用程序表中,并且 Oracle 数据库在将信息写入磁盘之前将自动对数据进行加密。 随后的选择操作将透明地解密数据,因此应用程序将继续正常地运行。 这一点很重要,因为当前的应用程序通常期望未加密的应用程序数据。 显示加密数据至少会使应用程序用户迷惑不解,甚至还会破坏现有的应用程序。

  设置加密密钥:

  Oracle 透明数据加密提供了实施加密所必需的关键管理基础架构。 加密的工作原理是将明文数据以及秘密(称作密钥)传递到加密程序中。 加密程序使用提供的密钥对明文数据进行加密,然后返回加密数据。 以往,创建和维护密钥的任务由应用程序完成。 Oracle 透明数据加密通过为整个数据库自动生成一个万能密钥解决了此问题。 在启动 Oracle 数据库时,管理员必须使用不同于系统口令或 DBA 口令的口令打开一个 Oracle Wallet 对象。 然后,管理员对数据库万能密钥进行初始化。 万能密钥是自动生成的。

  性能:

  由于索引数据未被加密,因此加密通常会影响现有的应用程序索引。 Oracle 透明数据加密对与给定应用程序表关联的索引值进行加密。 这意味着应用程序中的相等搜索对性能的影响很小,甚至没有任何影响。 例如,假设应用程序 card_id存在一个索引,并且此应用程序执行以下语句:

  SQL> Select cash from credit_card where card_id = '1025023590';

  Oracle 数据库将使用现有的应用程序索引,尽管 card_id信息已经在数据库中加密。

  准备用于加密的数据库:

  在本部分内容中,您将更新 sqlnet.ora、创建一个加密钱夹 (ewallet.p12)、打开此钱夹并为 TDE 创建万能密钥。执行以下操作:

  1. 您需要更新 sqlnet.ora 文件以包含一个 ENCRYPTED_WALLET_LOCATION 条目。打开一个终端窗口,然后输入以下命令:

  cd $ORACLE_HOME/network/admin

  gedit sqlnet.ora

  将以下条目添加到文件末尾:

  ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/admin/test97/wallet/)))

  如果不加这一项的话,则会提示下面错误:

  SQL> alter system set key identified by "hurray"
  2 ;
  alter system set key identified by "hurray"
  *
  ERROR at line 1:
  ORA-28368: cannot auto-create wallet

  /opt/oracle/admin/test97/wallet/ 目录是用来存放生成的钱夹的。
   可以为加密钱夹选择任何目录,但路径不应指向在数据库安装过程中创建的标准模糊钱夹 (cwallet.sso)。

  2. 接下来,您需要打开钱夹并创建万能加密密钥。从终端窗口中,输入以下命令:

  connect / as sysdbaalter system set key identified by "welcome1";

  此命令的作用为:

  l 如果指定的目录中不存在加密钱夹,则将创建加密钱夹 (ewallet.p12)、打开此钱夹并创建/重新创建 TDE 的万能密钥。

  l 如果指定目录中存在加密钱夹,则将打开此钱夹并创建/重新创建 TDE 的万能密钥。

  之后,就可以测试数据了。

  下面是实验记录:

alter system set key identified by "welcome1";

SQL> conn dodd/dodd123
create
table test (id number,credit_card_number varchar2(16) ENCRYPT NO SALT);

SQL> insert into test values(1,'1231243242');

1 row created.
SQL> insert into test values(2,'33245235');
SQL>
commit;
Commit complete.

SQL> select * from test;

        ID CREDIT_CARD_NUMB
---------- ----------------
         1 1231243242
         2 33245235

9 7 3 1 2 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203