Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明
?
?
一.TransparentData Encryption (TDE:透明數(shù)據(jù)加密) 說明
?
Orace TDE 是Orcle 10R2中的一個新特性,其可以用來加密數(shù)據(jù)文件里的數(shù)據(jù),保護從操作系統(tǒng)層面上對數(shù)據(jù)文件的訪問。11g的TDE 在10gR2的基礎(chǔ)上增強,允許在表空間級別進行加密。
?
1.1 11g 中TDE 新增功能
?
一些新增功能可增強透明數(shù)據(jù)加密(TDE)功能,這些功能是基于相同的基礎(chǔ)結(jié)構(gòu)構(gòu)建的。
為支持TDE 而對LogMiner 所做的更改提供了用于更改捕獲引擎的基礎(chǔ)結(jié)構(gòu),這些引擎可用于邏輯備用、流和異步更改數(shù)據(jù)捕獲。要讓LogMiner 支持TDE,它必須能夠訪問加密Wallet。要訪問該Wallet,必須裝載實例并使Wallet 處于開啟狀態(tài)。LogMiner 不支持硬件安全模塊(HSM) 或用戶持有密鑰。
對于邏輯備用,可在源或目標數(shù)據(jù)庫挖掘日志,因此用于這兩個數(shù)據(jù)庫的Wallet 必須相同。
加密列的處理方式在流和基于流的更改數(shù)據(jù)捕獲中均相同。將在Wallet 所在的源中挖掘重做記錄。數(shù)據(jù)以未加密的方式傳輸?shù)侥繕宋恢?#xff0c;然后在目標位置使用Wallet 進行加密。該數(shù)據(jù)可以使用高級安全選項在傳輸中進行加密以實現(xiàn)網(wǎng)絡(luò)加密。
?
?
TDE 中的新增功能包括:
(1)? 表空間加密
(2)? 支持LogMiner
(3)? 支持邏輯備用
(4)? 支持流
(5)? 支持異步更改數(shù)據(jù)捕獲
(6)? 基于硬件的主密鑰保護
?
1.2 表空間加密
表空間加密以在寫入時進行加密并在讀取時進行解密的塊級別加密技術(shù)為基礎(chǔ),并不在內(nèi)存中對數(shù)據(jù)進行加密。影響加密的唯一因素與I/O 相關(guān)聯(lián)。SQL 訪問路徑不變,并且支持所有數(shù)據(jù)類型。要使用表空間加密,加密Wallet 必須處于開啟狀態(tài)。
CREATETABLESPACE 命令包含一個用于設(shè)置加密屬性的ENCRYPTION 子句,以及一個導致使用加密的ENCRYPT 存儲參數(shù)。可以指定USING 'encrypt_algorithm' 來指示要使用的算法名稱。有效的算法包括3DES168、AES128、AES192和AES256。默認算法為AES128。可以在V$ENCRYPTED_TABLESPACES 視圖中查看這些屬性。
加密的數(shù)據(jù)在執(zhí)行操作(如JOIN 和SORT)期間會受到保護。這意味著數(shù)據(jù)在移動到臨時表空間時是安全的。還原日志和重做日志中的數(shù)據(jù)也受到保護。
如果平臺有相同的Endianess和Wallet,則加密的表空間是可移動的。
?
限制:
(1)? 無法對臨時表空間和還原表空間進行加密(所選的塊已加密)。
(2)? Bfiles 和外部表未加密。
(3)? 不支持跨不同的endian 平臺移動表空間。
(4)? 當前無法更改加密表空間的密鑰。解決方法是:使用所需的屬性創(chuàng)建一個表空間,然后將所有對象移動到新建的表空間中。
?
1.3 硬件安全模塊
硬件安全模塊(HSM) 是一種物理設(shè)備,可以安全地存儲加密密鑰。它還可以提供安全的計算空間(內(nèi)存)以執(zhí)行加密和解密操作。HSM 是Oracle wallet 的一種更安全的代替方法。
透明數(shù)據(jù)加密(TDE) 可使用HSM 來加強敏感數(shù)據(jù)的安全性。HSM 用于存儲TDE 使用的主加密密鑰。因為HSM 是一種物理設(shè)備而不是一個操作系統(tǒng)文件,所以在未授權(quán)的訪問嘗試中密鑰是安全的。使用主加密密鑰的所有加密和解密操作都在HSM 中執(zhí)行。這意味著主加密密鑰永遠不會在不安全的內(nèi)存中公開。
有些供應(yīng)商可提供硬件安全模塊,這些供應(yīng)商還必須提供相應(yīng)的庫。
?
?
二.示例
?
更多測試參考:
Securing Stored Data Using Transparent DataEncryption
http://docs.oracle.com/cd/E11882_01/network.112/e10746/asotrans.htm
?
2.1 創(chuàng)建Wallet
?
在對LOB 進行加密的SecureFile中也會用到wallet。
Oracle 11g 新特性 -- SecureFiles 說明
http://blog.csdn.net/tianlesoftware/article/details/8231322
?
在sqlnet.ora 文件里添加: ENCRYPTION_WALLET_LOCATION 和WALLET_LOCATION參數(shù)。
默認位置是:$ORACLE_BASE/admin/$ORACLE_SID/wallet。
?
--指定ORACLEWALLET的位置,這里使用ORACLE_HOME/network/admin,在sqlnet.ora里添加如下內(nèi)容:
?
WALLET_LOCATION=
?? (SOURCE =
???? (METHOD = FILE)
???? (METHOD_DATA =
?????? (DIRECTORY =/u01/app/oracle/product/11.2.0/db_1/network/admin)
???? )
?? )
?
ENCRYPTION_WALLET_LOCATION=
?? (SOURCE =
???? (METHOD = FILE)
???? (METHOD_DATA =
?????? (DIRECTORY =/u01/app/oracle/admin/dave/encryption_wallet)
???? )
?? )
?
SQLNET.WALLET_OVERRIDE= TRUE
SSL_CLIENT_AUTHENTICATION= FALSE
SSL_VERSION =0
?
--添加完之后,重啟listener,使參數(shù)生效。
?
--創(chuàng)建wallet:包括設(shè)置密碼、生成信任文件、并啟動wallet
CONN / ASSYSDBA
?
-- 11g version
ALTER SYSTEMSET ENCRYPTION KEY IDENTIFIED BY "myPassword";
?
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIEDBY "myPassword";
?
當實例重啟后或者wallet被關(guān)閉后,必須重新openwallets,這樣才能保護被加密的列.而在Open wallet之前,數(shù)據(jù)庫必須處于mount 狀態(tài)。 官網(wǎng)的說明如下:
?
The securityadministrator also needs to open the wallet before performing database recoveryoperations. This is because background processes may require access toencrypted redo and undo logs. When performing database recovery, the walletmust be opened before opening the database. This is illustrated in thefollowing statements:
?
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLETOPEN IDENTIFIED BY "myPassword";
SQL> ALTER DATABASE OPEN;
?
??? 當然也可以選擇配置自動登陸wallets。 但oracle 并不推薦使用這種方法。
?
?
?
2.2 創(chuàng)建加密表空間
??? 創(chuàng)建加密表空間使用ENCRYPTION 選項,通過USING 選項指定加密算法,默認使用AES128算法。注意,storage 選項必須指定ENCRYPT。 使用了表空間加密后就不允許使用NO SALT 選項。
?
??? 注意: 存在在加密表空間里的數(shù)據(jù),我們不能直接通過HEX的編輯器或者strings命令直接查看數(shù)據(jù)文件里的內(nèi)容。 而如果是普通的數(shù)據(jù)文件,我么可以直接在操作系統(tǒng)層面查看數(shù)據(jù)文件里的內(nèi)容。
?
SQL> CREATE TABLESPACE encrypted_anqing
?2? DATAFILE'/u01/app/oracle/oradata/dave/anqing01.dbf' SIZE 50M
?3? AUTOEXTEND ON NEXT 10M
?4? ENCRYPTION USING 'AES256'
?5? DEFAULT STORAGE(ENCRYPT);
?
Tablespace created.
?
--查看表空間加密情況:
SQL> SELECT tablespace_name, encryptedFROM dba_tablespaces;
?
TABLESPACE_NAME??????????????? ENC
------------------------------ ---
SYSTEM???????????????????????? NO
SYSAUX???????????????????????? NO
UNDOTBS1?????????????????????? NO
TEMP????????????????? ?????????NO
USERS????????????????????????? NO
ENCRYPTED_ANQING?????????????? YES
?
6 rows selected.
?
?
一般表空間不能轉(zhuǎn)換成加密表空間。 可以使用export/import,alterdatabase…move… 或者create table …as select * from … 來進行轉(zhuǎn)換。
?
2.3 測試表空間加密
?
SQL> CREATE TABLE dave (
?2??? id??? NUMBER(10),
?3??? data? VARCHAR2(50)
?4? )
? 5? TABLESPACE encrypted_anqing;
Table created.
SQL> CREATE INDEX idx_id ON dave(id)TABLESPACE encrypted_anqing;
Index created.
?
SQL> INSERT INTO dave (id, data) VALUES(1, 'This is a secret!');
1 row created.
?
SQL> COMMIT;
Commit complete.
?
SQL> select * from dave;
?
???????ID DATA
------------------------------------------------------------
????????1 This is a secret!
?
--flush buffer cache,確保數(shù)據(jù)刷入到數(shù)據(jù)文件:
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
?
System altered.
?
--當數(shù)據(jù)存放在加密的表空間之后,我們使用HEX editor,如UltraEdit,則不會顯示我們的data,而普通表空間是可以直接查看的:
[oracle@dave/u01/app/oracle/oradata/dave]$strings anqing01.dbf|grep "secret"
[oracle@dave /u01/app/oracle/oradata/dave]$
--這里返回為空。
?
--驗證非加密表空間:
SQL> create table dave2 tablespace usersas select * from dave;
Table created.
?
SQL> alter system flush buffer_cache;
System altered.
?
--注意: 這里對非加密表空間而言,我們可以直接查看加密的數(shù)據(jù):
[oracle@dave/u01/app/oracle/oradata/dave]$strings users01.dbf|grep "secret"
This is a secret!
[oracle@dave /u01/app/oracle/oradata/dave]$
?
?
--刪除加密表空間:
SQL> DROP TABLESPACE encrypted_anqingINCLUDING CONTENTS AND DATAFILES;
?
Tablespace dropped.
?
?
2.4 列(Column)加密
?
SQL> conn dave/dave;
Connected.
SQL> create table dave as selectobject_id as id, object_name as name from dba_objects;
Table created.
?
SQL> desc dave
?Name?????????????????????????????????????Null???? Type
?------------------------------------------------- ----------------------------
?ID????????????????????????????????????????????????NUMBER
?NAME??????????????????????????????????????????????VARCHAR2(128)
?
SQL> create index idx_dave_id ondave(id);
index created.
?
?
SQL> ALTER TABLE dave MODIFY (NAMEencrypt USING 'AES256' IDENTIFIED BY 'myPassword');
Table altered.
?
SQL> desc dave
?Name?????????????????????????????????????Null???? Type
?------------------------------------------------- ----------------------------
?ID????????????????????????????????????????????????NUMBER
?NAME??????????????????????????????????????????????VARCHAR2(128) ENCRYPT
?
SQL> set lin 160
SQL> col WRL_PARAMETER FOR a50
SQL> SELECT * FROM V$ENCRYPTION_WALLET;
?
WRL_TYPE???????????? WRL_PARAMETER????????????????????????????????????? STATUS
---------------------------------------------------------------------- ------------------
file????????????????/u01/app/oracle/admin/dave/encryption_wallet?????? OPEN
?
SQL> ALTER SYSTEM SET encryption walletCLOSE IDENTIFIED BY "myPassword";
System altered.
?
SQL> SELECT * FROM V$ENCRYPTION_WALLET;
?
WRL_TYPE???????????? WRL_PARAMETER????????????????????????????????????? STATUS
---------------------------------------------------------------------- ------------------
file???????????????? /u01/app/oracle/admin/dave/encryption_wallet?????? CLOSED
--這里wallet 已經(jīng)關(guān)閉。
?
--關(guān)閉之后查詢,就會報錯: wallet is not open:
SQL> select * from dave where rownum=1;
select * from dave where rownum=1
????????????? *
ERROR at line 1:
ORA-28365: wallet is not open
?
--重新打開wallet,就可以查詢加密的列了:
SQL> ALTER SYSTEM SET ENCRYPTION WALLETOPEN IDENTIFIED BY "myPassword";
?
System altered.
?
SQL> SELECT * FROM V$ENCRYPTION_WALLET;
?
WRL_TYPE???????????? WRL_PARAMETER????????????????????????????????????? STATUS
---------------------------------------------------------------------- ------------------
file???????????????? /u01/app/oracle/admin/dave/encryption_wallet?????? OPEN
?
SQL> select * from dave where rownum=1;
?
???????ID NAME
---------- -------------------
???????20 ICOL$
?
?
?
?
---------------------------------------------------------------------------------------
版權(quán)所有,文章允許轉(zhuǎn)載,但必須以鏈接方式注明源地址,否則追究法律責任!
Skype: ???tianlesoftware
QQ:???? ? tianlesoftware@gmail.com
Email: ???tianlesoftware@gmail.com
Blog:?? ? http://blog.csdn.net/tianlesoftware
Weibo: ???http://weibo.com/tianlesoftware
Twitter:? http://twitter.com/tianlesoftware
Facebook: http://www.facebook.com/tianlesoftware
Linkedin: http://cn.linkedin.com/in/tianlesoftware
轉(zhuǎn)載于:https://www.cnblogs.com/tianlesoftware/archive/2012/12/07/3609128.html
總結(jié)
以上是生活随笔為你收集整理的Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你看的是哪篇禁毒影片
- 下一篇: 判断dataset是否为空