分类: Oracle
2008-07-24 10:05:31
设置加密密钥:
性能:
由于索引数据未被加密,因此加密通常会影响现有的应用程序索引。Oracle透明数据加密对与给定应用程序表关联的索引值进行加密。这意味着应用程序中的相等搜索对性能的影响很小,甚至没有任何影响。例如,假设应用程序card_id存在一个索引,并且此应用程序执行以下语句:
准备用于加密的数据库:
在本部分内容中,您将更新sqlnet.ora、创建一个加密钱夹(ewallet.p12)、打开此钱夹并为TDE创建万能密钥。执行以下操作:
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";
alter system set key identified by "hurray"
*
ERROR at line 1:
ORA-28368: cannot auto-create wallet
/opt/oracle/admin/test97/wallet/目录是用来存放生成的钱夹的。
可以为加密钱夹选择任何目录,但路径不应指向在过程中创建的标准模糊钱夹(cwallet.sso)。
以上设置是指中设置,如果是在下,假设在G:\oracle中,则只需要在g:\oracle\product\10.2.0\admin\oracle10\x下新建wallet文件夹即可
2.接下来,您需要打开钱夹并创建万能加密密钥。从终端窗口中,输入以下命令:
connect / as sysdba
alter system set key identified by "welcome1";
此命令的作用为:
如果指定的目录中不存在加密钱夹,则将创建加密钱夹(ewallet.p12)、打开此钱夹并创建/重新创建TDE的万能密钥。如果指定目录中存在加密钱夹,则将打开此钱夹并创建/重新创建TDE的万能密钥。
之后,就可以测试数据了。
下面是实验记录:
首先以dba登录,执行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
可见,数据查看是明文,因为这个时候,加密钱夹已经打开,数据可以解密。
这时,停止,再打开:
SQL> shutdown immediate
Database closed.
Database dismounted.
instance shut down.
SQL> SQL> startup
ORACLE instance started.
Total System Global Area 524288000 bytes
Fixed Size 1979968 bytes
Variable Size 138414528 bytes
Database Buffers 377487360 bytes
Redo Buffers 6406144 bytes
Database mounted.
Database opened.
SQL> select * from dodd.test;
select * from dodd.test
ERROR at line 1:
ORA-28365: wallet is not open
SQL> select id from dodd.test;
ID
----------
1
2
如果用户想打开钱夹,必须具有alter system权限。
下面打开wallet:
SQL> conn / as sysdba
Connected.
SQL> alter system set wallet open identified by "welcome1";
System altered.
SQL> conn dodd/dodd123
Connected.
SQL> select * from test;
ID CREDIT_CARD_NUMB
---------- ----------------
1 1231243242
2 33245235
可以看到,加密钱夹打开后,数据可以被解密。
还有一条:sys用户的表不能被加密。
可见: TDE是在数据层面上对表里的,而且不会影响现有的策略。
丢失ewallet加密钱夹的话,是不能再解密数据的。
Oracle 10gR2的 TDE 特性,对于防止机密信息的泄漏能起到事半功倍的作用!
SQL> Select cash from credit_card where card_id = '1025023590';
Oracle 数据库将使用现有的应用程序索引,尽管 card_id信息已经在数据库中加密。