關於資料加密的原理,可以參考《[資料安全]談談密碼學的數學原理》 http://blog.csdn.net/u010415792/article/details/9007931。如何加密的技術都源自這裡,在瞭解 具體即時之前,一定要先瞭解公開金鑰密鑰的原理,知其然,也要知其所以然。
Oracle TDE的全稱是Transparent Data Encryption 透明資料加密,從10gr2開始支援基於列的加密 ,從11g開始支援基於資料表空間的加密。它的優點是對應用透明,管理簡便,無需應用設定,但它也有如 下限制:
– 只能使用B-Tree索引
– 加密的列無法對索引進行rang scan操作。
– 外部對象
– 可傳輸資料表空間
– exp/imp操作
TDE - 基於列的加密
由於有了Oracle的TDE-基於列的加密,你所要做的只是定義需要加密的列,Oracle將為包含加密列的表 建立一個私密的安全加密金鑰,然後採用你指定的密碼編譯演算法加密指定列的明文資料。
TDE支援的密碼編譯演算法有:
3DES168 AES128 AES192 AES256
下面看一個具體的例子:
1)保證資料庫相容版本高於10gr2
SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 11.2.0.0.0
2)設定wallet的位置(在sqlnet.ora檔案中寫入如下內容,需要重啟資料庫才會生效):
ENCRYPTION_WALLET_LOCATION = (SOURCE= (METHOD=file) (METHOD_DATA= (DIRECTORY=C:\app\xianzhu\product\11.2.0\wallet)))
3)在wallet裡面建立key
SQL> alter system set encryption key authenticated by "myPassword"; 系統已更改。
以上命令將會在對應目錄下產生wallet
4)建立一個表,對其中某列加密
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; 提交完成。