关于数据加密的原理,可以参考《[数据安全]谈谈密码学的数学原理》http://blog.csdn.net/u010415792/article/details/9007931。如何加密的技术都源自这里,在了解具体即时之前,一定要先了解公钥密钥的原理,知其然,也要知其所以然。
Oracle TDE的全称是Transparent Data Encryption 透明数据加密,从10gr2开始支持基于列的加密,从11g开始支持基于表空间的加密。它的优点是对应用透明,管理简便,无需应用设置,但它也有如下限制:
– 只能使用B-Tree索引
– 加密的列无法对索引进行rang scan操作。
– 外部对象
– 可传输表空间
– exp/imp操作
SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 11.2.0.0.0
ENCRYPTION_WALLET_LOCATION = (SOURCE= (METHOD=file) (METHOD_DATA= (DIRECTORY=C:\app\xianzhu\product\11.2.0\wallet)))
SQL> alter system set encryption key authenticated by "myPassword"; 系统已更改。
SQL> create table tde_private( 2 id number(10) primary key, 3 info varchar2(50) encrypt using 'AES192' 4 ); 表已创建。 SQL> set line 200 SQL> select * from dba_encrypted_columns; OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SAL INTEGRITY_AL ---------------- ------------------------------ ------------------------------ ----------------------------- --- ------------ TEST TDE_PRIVATE INFO AES 192 bits key YES SHA-1 SQL> insert into tde_private values (1, 'This is private info'); 已创建 1 行。 SQL> commit; 提交完成。
SQL> alter system set wallet close identified by "myPassword"; 系统已更改。 SQL> select * from tde_private; select * from tde_private * 第 1 行出现错误: ORA-28365: Wallet 未打开
SQL> alter system set wallet open identified by "myPassword"; 系统已更改。 SQL> select * from tde_private; ID INFO ---------- -------------------------------------------------- 1 This is private info
SQL> create tablespace encrypted_ts encryption using 'AES256' default storage(encrypt); 表空间已创建。 SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='ENCRYPTED_TS'; TABLESPACE_NAME ENC ------------------------------ --- ENCRYPTED_TS YES