oracle Wallet的使用

oracle Wallet的使用(即內部加密技術TDE(Transparent Data Encryption )) 算法

1. TDE是Oracle10gR2中推出的一個新功能,使用時要保證Oracle版本是在10gR2或者以上
--查看oracle版本:
select * from v$version;sql

二、建立一個新目錄,並指定爲Wallet目錄
D:\oracle\product\10.2.0\admin\ora10\ora_wallet數據庫

3. 設置wallet目錄,在參數文件sqlnet.ora中,按照下面的格式加入信息:
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)
                           (METHOD_DATA=(DIRECTORY=D:\oracle\product\10.2.0\admin\ora10\ora_wallet)))oracle

4. 建立master key文件,指定wallet密碼,使用SYS用戶登入系統,創建加密文件
SQL> alter system set encryption key identified by "wallet";
System alteredide

--  密碼"wallet"不加引號時,後面使用時也不須要用引號
此時在設置的目錄下,多出一個Personal Information Exchange類型的文件,至關於咱們生成的master key文件。D:\oracle\product\10.2.0\admin\ora10\ora_wallet\ewallet.p12加密

五、啓動、關閉Wallet 
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet"
ORA-28354: wallet 已經打開
 
SQL>  ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;   --關閉
System altered
 
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet";  --打開
System altered
到此,已經成功配置了Wallet,建立了master key。spa

下面看如何使用TDE進行數據加密:orm

加密數據列:
對數據列加密是TDE一個經常使用的功能。常須要對數據庫中某個表的某個敏感數據進行加密處理,方式信息的外泄。索引

首先,在定義數據表中的數據列(或者修改數據列)的時候,使用ENCRYPT進行標註。表示這個字段是使用加密保護的重要字典。
--建臨時表:
create table t_tmp_emplorey
as
select * from emplorey t字符串

--加密數據列,使用了ENCRYPT進行標誌,代表須要對這個字段進行加密處理,採用默認的加密配置。
alter table scott.t_tmp_emplorey modify (sal encrypt);

注意:在默認不指定的狀況下,Oracle在加密以前,對明文都要進行salt處理。所謂salt處理是一種強化加密數據的方法。經過在加密前明文中摻入一個隨機字符串,來強化加密層級,防止進行字典***和其餘類型的破解操做。若是不須要進行salt處理,就是在ENCRYPT後面加 No Salt。

--例: alter table scott.t_tmp_emplorey modify (sal encrypt no salt);
 
--指定加密算法
alter table scott.t_tmp_emplorey  modify (sal encrypt  using '3DES168');

--若是要對一個已經加密處理的數據列,解除加密,使用alter table…和DECRYPT關鍵字就能夠實現。
SQL> alter table scott.t_tmp_emplorey  modify (sal DECRYPT) ;
Table altered
--解除加密後,關閉Wallet後,查詢數據不受影響。

6. 對查詢、索引的影響:
查詢結果彷佛和通常的沒有差異,可是若是關閉瞭解密Wallet會如何?
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
System altered

--再次查詢時報錯
select * from scott.t_tmp_emplorey  t;
ORA-28365: Wallet 未打開

--可以查找到數目
select count(1) from scott.t_tmp_emplorey  t;

--對索引的影響,若是列加密使用了salt,在對該列進行索引的時候,會報錯。:
SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);

create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);
ORA-28338: 沒法使用 salt 值加密索引列

SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(EMPNO); Index created --沒有加密的列能夠創建索引

相關文章
相關標籤/搜索