Oracle 11gR1中的表空間加密

lwitpub發表於2012-02-21
轉載自51cto.com

Oracle 10gR2中引入了透明資料加密功能後,大大簡化了加密資料檔案中的資料,預防來自作業系統的訪問,表空間加密擴充套件了這種技術,允許對錶空間中的內容條目進行加密,而不是基於一列一列地配置加密。

Oracle 10gR2中引入了透明資料加密功能後,大大簡化了加密資料檔案中的資料,預防來自作業系統的訪問,表空間加密擴充套件了這種技術,允許對錶空間中的內容條目進行加密,而不是基於一列一列地配置加密。

建立wallet

設定表空間加密的環境與透明資料加密的環境一致,在嘗試建立一個加密表空間之前,先要建立一個wallet來保留加密金鑰,按照下面的順序搜尋wallet:

1、sqlnet.ora檔案中引數ENCRYPTION_WALLET_LOCATION指定的位置

2、sqlnet.ora檔案中引數WALLET_LOCATION指定的位置

3、wallet預設位置($ORACLE_BASE/admin/$ORACLE_SID/wallet)

儘管加密表空間可以共享預設的資料庫wallet,但Oracle建議你為透明資料加密功能單獨使用一個wallet,只需要在 sqlnet.ora檔案中為引數ENCRYPTION_WALLET_LOCATION指定一個值即可,我們在sqlnet.ora檔案中新增了下面的 行,並確保指定的目錄已經被建立好了。

ENCRYPTION_WALLET_LOCATION=

(SOURCE=(METHOD=FILE)(METHOD_DATA=

(DIRECTORY=/u01/app/oracle/admin/DB11G/encryption_wallet/)))

這個引數也可用於標識硬體安全模型(HSM)作為wallet位置。

下面的命令建立和開啟wallet。

SQL> CONN sys/password@db11g AS SYSDBA

SQL> ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY "myPassword";

wallet在例項重啟後必須重新開啟才能防止對加密資料的訪問。

SQL> ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY "myPassword";

SQL> ALTER SYSTEM SET WALLET CLOSE;

建立表空間

加密表空間是透過帶有USING子句指定加密演算法的ENCRYPTION子句建立的,如果沒有USING子句,預設的加密演算法是AES128,另 外,必須指定default storage(encrypt)子句,表空間加密不允許在TDE(透明資料加密)可用的NO SALT選項,下面的語句建立了一個加密表空間,用USING子句明確地指出了加密演算法使用AES256。


CREATE TABLESPACE encrypted_ts DATAFILE '/u01/app/oracle/oradata/DB11G/encrypted_ts01.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); ALTER USER test QUOTA UNLIMITED ON encrypted_ts; 檢視DBA_TABLESPACES和USER_TABLESPACES中的ENCRYPTED列指出了表空間是否加密。 SELECT tablespace_name, encrypted FROM dba_tablespaces; TABLESPACE_NAME ENC ------------------------------ --- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO ENCRYPTED_TS YES 6 rows selected. SQL>

普通表空間是不能轉換到加密表空間的,相反,資料必須被手工使用匯出/匯入進行轉移,“alter table ... move ...”或“create  table ... as select * from ...”

測試加密

我們可以建立一些物件測試加密,下面的程式碼在加密表空間中建立了一個表和一個索引,並在表中插入了一行資料。

CONN test/test@db11g CREATE TABLE ets_test ( id NUMBER(10), data VARCHAR2(50) ) TABLESPACE encrypted_ts; CREATE INDEX ets_test_idx ON ets_test(data) TABLESPACE encrypted_ts; INSERT INTO ets_test (id, data) VALUES (1, 'This is a secret!'); COMMIT; 清空緩衝區確保資料寫入到資料檔案中。 CONN sys/password@db11g AS SYSDBA ALTER SYSTEM FLUSH BUFFER_CACHE;

當使用十六進位制編輯器(如UltraEdit)開啟這個檔案時只能看到不可列印的字元,在加密表空間的表或索引中的資料是不可見的,成為了機密資訊!

當你測試完加密表空間,一定要清除表空間和對應的資料檔案。

SQL> DROP TABLESPACE encrypted_ts INCLUDING CONTENTS AND DATAFILES;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/628922/viewspace-716893/,如需轉載,請註明出處,否則將追究法律責任。

相關文章