oracle数据透明加密,oracle数据透明加密-TDE
介紹
10g R2提供了一個新的特性,讓你只需要做如下動作:你可以不寫一行代碼,只需要聲明你需要加密某列。當用戶插入數據的時候,數據庫透明的加密數據然后存儲加密后的數據。同樣的,當用戶讀取數據時,數據庫自動進行解密。由于加解密操作對應用程序來說都是透明的,不需要應用程序修改代碼,因此這個特性就叫做:透明數據加密(TDE)。
簡單來說默認不對數據進行TDE加密,數據庫中的某些敏感數據是直接可以在操作系統層面進行讀取的,方法不進行闡述。
10gR2 可以對指定列進行加密,11g還可以對表空間進行加密。
配置TDE
制定master密鑰存放位置(位置TNS_ADMIN變量為準)
vi
$ORACLE_HOME/network/admin/sqlnet.ora
添加如下參數
ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=
/home/oracle/app/oracle/admin/orcl/wallet)))
oracle用戶手動創建wallet文件夾
mkdir /home/oracle/app/oracle/admin/orcl/wallet
否則報錯ORA-28368: cannot auto-create wallet
創建wallet并在其中裝入master密鑰
SQL> alter system set key
identified by "oracle";
System altered.
在$ORACLE_BASE/admin/sid/wallet文件夾中生成密鑰文件
ewallet.p12
創建wallet后,它將保持打開狀態,直到將其關閉,或者重啟數據庫。
可以檢查wallet的狀態
col wrl_type format a7
col wrl_parameter format a55
select
wrl_type,wrl_parameter,status from gv$encryption_wallet;
WRL_TYP WRL_PARAMETER
-------
-------------------------------------------------------
STATUS
------------------
file??? /home/oracle/app/oracle/admin/orcl/wallet
OPEN
手動打開wallet,打開是需要密碼的
alter system set encryption wallet
open identified by? "oracle";
也就是說數據庫每次重啟都需要安全管理專員手動打開wallet,否則加密數據無法讀寫。
當然也可以設置自動登錄wallet,但是建議在開發或者測試階段進行。
打開自動登錄的方法通過Oracle
wallet Manager
運行owm命令打開圖形界面,
打開現有wallet(找到master密鑰存放路徑)
打開自動登錄
在master密鑰存放路徑中生成一個文件cwallet.sso。
關閉wallet
可以通過手動關閉wallet
alter system set wallet close;
注意10g關閉不需要wallet口令,如果wallet被關閉,所有的加密解密將自動終止。
11g關閉需要wallet口令,語法如下,否則提示ORA-28390:
auto login wallet not open but encryption wallet may be open
alter system set wallet close
identified by "oracle";
另外,如果設置自動登錄11g環境下執行關閉命令不需要輸入密碼
SQL> alter
system set wallet close;
可以執行成功,但是查詢gv$encryption_wallet視圖,狀態依然是OPEN,而不是closed。
此時查詢依然可以查詢加密內容。
TDE的密鑰管理
在對表進行加密時,TDE為每個包含加密字段的表都生成相應的密鑰,而不是所有的表都使用相同的密鑰。
TDE使用對稱密鑰技術進行數據加密和解密,性能高。
對于表空間的密鑰是存儲在數據字典中,前提是它首先使用master密鑰對所有的表密鑰進行加密。
新表創建加密列
create table
( encrypt [algorithm] [nomac] [no salt]);
[algorithm]加密算法
[nomac] 10.2.0.4才開始有的參數當加密一個列需要額外的20字節存儲密文時,將會生成一個消息驗證碼。
[no salt]) salt通過在明文中插入某個隨機值(在TED中為一個16字節的值)能夠有效的增強加密算法的強度,避免對加密數據的“明文"攻擊。
create table foo (columnA
dataype,columnB dataype encrypt);
該句默認使用192為子長密鑰的AES加密算法,使用salt以及一個20位的mac。當然,如果希望某列上用索引,最好不要在其上加入salt。
查看加密列
select
owner,table_name,column_name,encryption_alg,salt from dba_encrypted_columns;
對現有列進行加密
alter table
modify? ( encrypt
['nomac'] [no salt]);
如果數據量比較大,直接對列加密會增加cpu和存儲負載,因此可以考慮使用在線重定義的形式重新組織表。(不贅述)
TDE列加密弊端
使用數據修改捕獲(無論同步還是異步)、流、物化視圖、透明表空間、LOB就不能用了,隨著11G引入表空間加密,這一問題得到解決。
加密的列如果使用了salt,則無法在上面創建索引。
因為索引存儲的是加密后的值,所以即使不使用salt也只可以使用基于等式匹配的查詢,對于范圍查詢也無能為力。
因為不同表密鑰不同,因此除非事先解密數據,否則無法發現PK/FK的關系定義。
表空間加密
表空間加密,其中的所有存儲內容都會進行加密。
create tablespace ts_encrypted
datafile
'/home/oracle/app/oracle/oradata/ORCL/datafile/ts_encrypted _d08ww9lb_.dbf'
size 100m autoextend on encryption using 'AES192' default? storage(encrypt);
查詢表空間加密
select
ts.name,et.encryptedts,et.encryptionalg from v$tablespace
ts,v$encrypted_tablespaces et where ts.ts#=et.ts#;
列級別加密步驟
1確定待加密的列
2確定tde都能夠支持此數據類型
3確定在該列上不存在索引
4確定改了不屬于某個PK/FK關系
5對列進行加密
6重新組織表或在線重定義
表空間加密步驟
1確定含有敏感數據的列表
2創建一個新的加密表空間
3使用alert table
customer move tablespace encrypted_customer ;將表移動到新表空間。
4索引需要重建,例如:alter table tde_table1_index1 rebuild tablespace encryptedtbs;
5將表從加密的表空間move到普通表空間,就完成了解密。
11g表空間級透明數據加密的功能提升
相對于10g版本的列級TDE,表空間級TDE提供了更多的靈活性和更好的性能。
下列表格是10g列級TDE和11g表空間級TDE的比較。
列級TDE
表空間級TDE
加密完成在
PGA
Data Block層
在SGA中加密數據的狀態
加密的
解密的
支持的索引類型
只支持b-tree索引
支持所有類型索引
支持外鍵?
不知道外鍵加密(因為不同的表用不通的key)
支持外鍵
支持的索引search方式
支持等值search,不知道范圍掃描
支持所有類型的search
支持的數據類型
部分
所有
執行計劃是否改變
可能
不改變
是否需要增加存儲的占用
是
否
對其他產品的支持
l? TDE支持Dataguard,
l? TDE不支持傳統導出導入exp/imp
l? TDE支持expdp/impdp,可以直接導出,但是會提示ORA-39173 encryptd data has been stored unencrypted in dump file set,表時是明文方式存儲在DUMP文件中,可以直接導入。
為了保證導出DUMP的安全也可以在導出時使用ENCRYPTION_PASSWORD參數來對備份文件設置加密口令,導入時只有提供口令密碼才能導入數據。
總結
以上是生活随笔為你收集整理的oracle数据透明加密,oracle数据透明加密-TDE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 透明加密系统设计及实现-透明加密的关键技
- 下一篇: Unity漫延的实现思路(流体漫延, 火