Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明
?
?
一.TransparentData Encryption (TDE:透明數據加密) 說明
?
Orace TDE 是Orcle 10R2中的一個新特性,其可以用來加密數據文件里的數據,保護從操作系統層面上對數據文件的訪問。11g的TDE 在10gR2的基礎上增強,允許在表空間級別進行加密。
?
1.1 11g 中TDE 新增功能
?
一些新增功能可增強透明數據加密(TDE)功能,這些功能是基于相同的基礎結構構建的。
為支持TDE 而對LogMiner 所做的更改提供了用于更改捕獲引擎的基礎結構,這些引擎可用于邏輯備用、流和異步更改數據捕獲。要讓LogMiner 支持TDE,它必須能夠訪問加密Wallet。要訪問該Wallet,必須裝載實例并使Wallet 處于開啟狀態。LogMiner 不支持硬件安全模塊(HSM) 或用戶持有密鑰。
對于邏輯備用,可在源或目標數據庫挖掘日志,因此用于這兩個數據庫的Wallet 必須相同。
加密列的處理方式在流和基于流的更改數據捕獲中均相同。將在Wallet 所在的源中挖掘重做記錄。數據以未加密的方式傳輸到目標位置,然后在目標位置使用Wallet 進行加密。該數據可以使用高級安全選項在傳輸中進行加密以實現網絡加密。
?
?
TDE 中的新增功能包括:
(1)? 表空間加密
(2)? 支持LogMiner
(3)? 支持邏輯備用
(4)? 支持流
(5)? 支持異步更改數據捕獲
(6)? 基于硬件的主密鑰保護
?
1.2 表空間加密
表空間加密以在寫入時進行加密并在讀取時進行解密的塊級別加密技術為基礎,并不在內存中對數據進行加密。影響加密的唯一因素與I/O 相關聯。SQL 訪問路徑不變,并且支持所有數據類型。要使用表空間加密,加密Wallet 必須處于開啟狀態。
CREATETABLESPACE 命令包含一個用于設置加密屬性的ENCRYPTION 子句,以及一個導致使用加密的ENCRYPT 存儲參數。可以指定USING 'encrypt_algorithm' 來指示要使用的算法名稱。有效的算法包括3DES168、AES128、AES192和AES256。默認算法為AES128。可以在V$ENCRYPTED_TABLESPACES 視圖中查看這些屬性。
加密的數據在執行操作(如JOIN 和SORT)期間會受到保護。這意味著數據在移動到臨時表空間時是安全的。還原日志和重做日志中的數據也受到保護。
如果平臺有相同的Endianess和Wallet,則加密的表空間是可移動的。
?
限制:
(1)? 無法對臨時表空間和還原表空間進行加密(所選的塊已加密)。
(2)? Bfiles 和外部表未加密。
(3)? 不支持跨不同的endian 平臺移動表空間。
(4)? 當前無法更改加密表空間的密鑰。解決方法是:使用所需的屬性創建一個表空間,然后將所有對象移動到新建的表空間中。
?
1.3 硬件安全模塊
硬件安全模塊(HSM) 是一種物理設備,可以安全地存儲加密密鑰。它還可以提供安全的計算空間(內存)以執行加密和解密操作。HSM 是Oracle wallet 的一種更安全的代替方法。
透明數據加密(TDE) 可使用HSM 來加強敏感數據的安全性。HSM 用于存儲TDE 使用的主加密密鑰。因為HSM 是一種物理設備而不是一個操作系統文件,所以在未授權的訪問嘗試中密鑰是安全的。使用主加密密鑰的所有加密和解密操作都在HSM 中執行。這意味著主加密密鑰永遠不會在不安全的內存中公開。
有些供應商可提供硬件安全模塊,這些供應商還必須提供相應的庫。
?
?
二.示例
?
更多測試參考:
Securing Stored Data Using Transparent DataEncryption
http://docs.oracle.com/cd/E11882_01/network.112/e10746/asotrans.htm
?
2.1 創建Wallet
?
在對LOB 進行加密的SecureFile中也會用到wallet。
Oracle 11g 新特性 -- SecureFiles 說明
http://blog.csdn.net/tianlesoftware/article/details/8231322
?
在sqlnet.ora 文件里添加: ENCRYPTION_WALLET_LOCATION 和WALLET_LOCATION參數。
默認位置是:$ORACLE_BASE/admin/$ORACLE_SID/wallet。
?
--指定ORACLEWALLET的位置,這里使用ORACLE_HOME/network/admin,在sqlnet.ora里添加如下內容:
?
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,使參數生效。
?
--創建wallet:包括設置密碼、生成信任文件、并啟動wallet
CONN / ASSYSDBA
?
-- 11g version
ALTER SYSTEMSET ENCRYPTION KEY IDENTIFIED BY "myPassword";
?
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIEDBY "myPassword";
?
當實例重啟后或者wallet被關閉后,必須重新openwallets,這樣才能保護被加密的列.而在Open wallet之前,數據庫必須處于mount 狀態。 官網的說明如下:
?
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 創建加密表空間
??? 創建加密表空間使用ENCRYPTION 選項,通過USING 選項指定加密算法,默認使用AES128算法。注意,storage 選項必須指定ENCRYPT。 使用了表空間加密后就不允許使用NO SALT 選項。
?
??? 注意: 存在在加密表空間里的數據,我們不能直接通過HEX的編輯器或者strings命令直接查看數據文件里的內容。 而如果是普通的數據文件,我么可以直接在操作系統層面查看數據文件里的內容。
?
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.
?
?
一般表空間不能轉換成加密表空間。 可以使用export/import,alterdatabase…move… 或者create table …as select * from … 來進行轉換。
?
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,確保數據刷入到數據文件:
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
?
System altered.
?
--當數據存放在加密的表空間之后,我們使用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.
?
--注意: 這里對非加密表空間而言,我們可以直接查看加密的數據:
[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 已經關閉。
?
--關閉之后查詢,就會報錯: 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$
?
?
?
?
---------------------------------------------------------------------------------------
版權所有,文章允許轉載,但必須以鏈接方式注明源地址,否則追究法律責任!
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
轉載于:https://www.cnblogs.com/tianlesoftware/archive/2012/12/07/3609128.html
總結
以上是生活随笔為你收集整理的Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你看的是哪篇禁毒影片
- 下一篇: 判断dataset是否为空