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