Oracle中对列加密的方法
Oracle支持多種列加密方式:
1,透明數(shù)據(jù)加密(TDE):
create table encrypt_col(id int,
txt varchar2(100) encrypt using '算法名稱' identified by '密鑰' no salt);
優(yōu)點(diǎn):對(duì)應(yīng)用完全透明
缺點(diǎn):需要數(shù)據(jù)庫管理員管理wallet,增加了管理復(fù)雜性,也無法避免數(shù)據(jù)庫管理員查看原文。
2,使用DBMS_CRYPTO包
優(yōu)點(diǎn):只要應(yīng)用程序保存好密鑰,數(shù)據(jù)庫管理員無法察看:
測試:
DECLARE
?? input_string?????? VARCHAR2 (200) :=? 'Secret Message';
?? output_string????? VARCHAR2 (200);
?? encrypted_raw????? RAW (2000);???????????? -- stores encrypted binary text
?? decrypted_raw????? RAW (2000);???????????? -- stores decrypted binary text
?? num_key_bytes????? NUMBER := 256/8;??????? -- key length 256 bits (32 bytes)
?? key_bytes_raw????? RAW (32);?????????????? -- stores 256-bit encryption key
?? encryption_type??? PLS_INTEGER :=????????? -- total encryption type
??????????????????????????? DBMS_CRYPTO.ENCRYPT_AES256
????????????????????????? + DBMS_CRYPTO.CHAIN_CBC
????????????????????????? + DBMS_CRYPTO.PAD_PKCS5;
BEGIN
?? DBMS_OUTPUT.PUT_LINE ( 'Original string: ' || input_string);
?? key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
?? DBMS_OUTPUT.PUT_LINE ( 'key_bytes_raw: ' || key_bytes_raw);
?? encrypted_raw := DBMS_CRYPTO.ENCRYPT
????? (
???????? src => UTL_I18N.STRING_TO_RAW (input_string,? 'AL32UTF8'),
???????? typ => encryption_type,
???????? key => key_bytes_raw
????? );
?? DBMS_OUTPUT.PUT_LINE ('Encrypted string: ' || encrypted_raw);
?
?? decrypted_raw := DBMS_CRYPTO.DECRYPT
????? (
???????? src => encrypted_raw,
???????? typ => encryption_type,
???????? key => key_bytes_raw
????? );
?? output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
?
?? DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string);
END;
/
==>
Original string: Secret Message
key_bytes_raw? : 2D9AB3BE8CDFBCD942162D0F6C90956C503E432D5128BE26116C39BA4DAC6B96
Encrypted string: 51E36E4576F951A940B671394B2FDC05
Decrypted string: Secret Message
?
?
------------------
透明數(shù)據(jù)加密常見問題解答
TDE 有哪些相關(guān)的開銷?
與未加密的表空間相比,加密的表空間不會(huì)要求更高的存儲(chǔ)空間。
與列級(jí) TDE 相關(guān)的開銷分為兩方面:存儲(chǔ)和性能。在性能方面,與加密或解密常用屬性(如信用卡號(hào)碼)相關(guān)的開銷估計(jì)為 5%。當(dāng)索引基于加密列構(gòu)建時(shí),索引的創(chuàng)建將使用密文。如果經(jīng) TDE 加密的列已建立索引并為 SQL 語句引用,Oracle 將對(duì) SQL 語句中用到的值進(jìn)行透明加密并使用密文進(jìn)行索引查詢。TDE 相關(guān)的存儲(chǔ)開銷可能會(huì)很大,這是因?yàn)槊總€(gè)加密值都有額外 20 個(gè)字節(jié)的完整性檢查。此外,TDE 會(huì)將加密值填充到 16 個(gè)字節(jié),所以如果信用卡號(hào)碼要求 9 個(gè)字節(jié)的存儲(chǔ)空間,加密該號(hào)碼將要求額外 7 個(gè)字節(jié)的存儲(chǔ)空間。最后,如果為加密值指定了 salt,該 salt 將要求額外 16 個(gè)字節(jié)的存儲(chǔ)空間。總之,加密表中的一列將要求每行有 33 到 48 個(gè)字節(jié)的額外存儲(chǔ)空間。
--------------------------------------------------------------------------------
數(shù)據(jù)在網(wǎng)絡(luò)上依然是加密狀態(tài)嗎?
使用 TDE 加密后的數(shù)據(jù)在離開數(shù)據(jù)庫前會(huì)首先進(jìn)行解密。不過,這些數(shù)據(jù)可以通過 Oracle 的網(wǎng)絡(luò)加密解決方案在網(wǎng)絡(luò)上進(jìn)行加密,該方案和 TDE 一同包含在 Oracle Advanced Security 選件中。Oracle 的網(wǎng)絡(luò)加密解決方案可以對(duì) Oracle SQL*Net 上傳送的所有數(shù)據(jù)進(jìn)行加密。
--------------------------------------------------------------------------------
任何人只要獲得應(yīng)用程序的授權(quán)就能對(duì)數(shù)據(jù)進(jìn)行解密嗎?
是的,TDE 在使客戶能夠在數(shù)據(jù)庫內(nèi)應(yīng)用加密,而不影響現(xiàn)有的應(yīng)用程序。以加密格式返回?cái)?shù)據(jù)會(huì)破壞現(xiàn)有的應(yīng)用程序。TDE 的優(yōu)勢是,加密不會(huì)產(chǎn)生傳統(tǒng)數(shù)據(jù)庫加密解決方案所產(chǎn)生的開銷,傳統(tǒng)的方案要求有觸發(fā)器和視圖。
--------------------------------------------------------------------------------
TDE 與 Oracle 提供的加密方法有何不同?
Oracle 通過 Oracle8i 引入了 DBMS_OBFUSCATION_TOOLKIT。Oracle 10g 版本 1 引入了新的 DBMS_CRYPTO 程序包。這些程序包中的各種 API 可用于對(duì)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行手動(dòng)加密。不過,此應(yīng)用程序必須管理加密密鑰,并且要通過調(diào)用 API 進(jìn)行要求的加密和解密操作。
--------------------------------------------------------------------------------
哪些加密算法可與 TDE 一同使用?
TDE 支持 3DES168、AES128(表空間加密默認(rèn)算法)、AES192(列級(jí) TDE 默認(rèn)算法)和 AES256。
--------------------------------------------------------------------------------
可以使用第三方加密算法代替 TDE 提供的算法嗎?
不可以,不能插入其他加密算法。
--------------------------------------------------------------------------------
TDE 的許可方式是什么?
TDE 作為 Oracle Advanced Security 選件的一部分進(jìn)行打包,該選件包含在 Oracle 企業(yè)版中。
--------------------------------------------------------------------------------
可以對(duì)帶有外鍵約束的列使用 TDE 嗎?
使用表空間加密時(shí),即使某個(gè)表在加密的表空間外部,外鍵的加密方式也和加密表空間中存儲(chǔ)的所有其他元素相同。列級(jí) TDE 不支持對(duì)外鍵約束中使用的列進(jìn)行加密。這是因?yàn)閱蝹€(gè)表有它們自己的特殊加密密鑰。
--------------------------------------------------------------------------------
可以對(duì)聯(lián)接中使用的列進(jìn)行加密嗎?
可以。即使聯(lián)接條件的列已加密,聯(lián)接表對(duì)于應(yīng)用程序和用戶也是透明的。
--------------------------------------------------------------------------------
TDE 支持哪些數(shù)據(jù)類型?
由于表空間加密對(duì)整個(gè)表空間進(jìn)行加密,在支持的數(shù)據(jù)類型上沒有限制。
下面的數(shù)據(jù)類型可使用列級(jí) TDE 進(jìn)行加密:
? varchar2???????? nvarchar2
? number??????????????? date
? binary_float????????? binary_double
? timestamp???????????? raw
? char????????????????? nchar
? SecureFile LOBs
--------------------------------------------------------------------------------
何時(shí)使用列級(jí) TDE 或表空間加密?
根據(jù)下面的指導(dǎo)原則確定具體方法的選擇:
僅對(duì)因合規(guī)性原因需要加密的數(shù)據(jù)進(jìn)行加密(PCI-DSS 的信用卡和帳戶號(hào)碼;用于類似于 CA SB 1386 這樣的漏洞通知法律的地址、姓名和個(gè)人身份號(hào)碼(駕駛證,身份證)),或者對(duì)其他您認(rèn)為的關(guān)鍵數(shù)據(jù)進(jìn)行加密,如薪水、研究結(jié)果、客戶信息。
如果您需要對(duì)外鍵列中的數(shù)據(jù)進(jìn)行加密,或者您需要除 B 樹外的索引,又或者您需要對(duì)列級(jí) TDE 不支持的數(shù)據(jù)類型進(jìn)行加密,可選擇表空間加密。
如果列級(jí) TDE 能夠滿足您的安全和安規(guī)性要求,您可以根據(jù)性能測試結(jié)果進(jìn)行選擇
--------------------------------------------------------------------------------
加密密鑰可以更改嗎?
表空間加密的萬能密鑰不能重新生成。變通方法是,創(chuàng)建一個(gè)新的加密表空間,備份當(dāng)前表空間,將所有表和其他內(nèi)容從舊的表空間轉(zhuǎn)移到新表空間中,然后刪除舊的加密表空間。
列級(jí) TDE 使用一個(gè)兩層密鑰機(jī)制。當(dāng)列級(jí) TDE 應(yīng)用到現(xiàn)有的應(yīng)用程序表列上時(shí),Oracle 數(shù)據(jù)字典中會(huì)創(chuàng)建并存儲(chǔ)一個(gè)新的表鑰(用于該表中所有列)。該表鑰使用萬能密鑰加密。萬能密鑰在 TDE 進(jìn)行初始化時(shí)生成,并存儲(chǔ)在數(shù)據(jù)庫外部的 Oracle 錢夾或符合 PKCS#11 的 HSM 設(shè)備中。萬能密鑰和列密鑰均可基于公司的安全策略進(jìn)行獨(dú)立修改。Oracle 建議在修改萬能密鑰前后均對(duì)錢夾進(jìn)行備份。
--------------------------------------------------------------------------------
可否在 HSM 設(shè)備中存儲(chǔ)用于表空間加密的萬能密鑰?
不可以。如果您從 10gR2 中的列加密移植到 11gR1 中的列和表空間加密,則必須首先在 11gR1 數(shù)據(jù)庫上重新生成萬能密鑰,以自動(dòng)將用于表空間加密的萬能密鑰添加到您的軟件錢夾上,然后將列萬能密鑰移植到 HSM 設(shè)備上。
--------------------------------------------------------------------------------
可以加密現(xiàn)有表空間嗎?
不可以。變通方法是,創(chuàng)建一個(gè)新的加密表空間,備份當(dāng)前表空間,將所有表和其他內(nèi)容從舊的表空間轉(zhuǎn)移到新表空間中,然后刪除舊的加密表空間。
--------------------------------------------------------------------------------
壓縮可否與表空間加密協(xié)同工作?
可以,內(nèi)容在壓縮后進(jìn)行加密。
--------------------------------------------------------------------------------
可傳輸?shù)谋砜臻g可否與加密的表空間協(xié)同工作?
可以。但條件是,要么目標(biāo)數(shù)據(jù)庫上必須有萬能密鑰;要么,如果已經(jīng)使用了一個(gè)不同的萬能密鑰,使用 Oracle 數(shù)據(jù)泵對(duì)數(shù)據(jù)進(jìn)行導(dǎo)出和導(dǎo)入,這可以通過轉(zhuǎn)儲(chǔ)文件的可選加密來完成。
--------------------------------------------------------------------------------
什么是錢夾?
錢夾是一個(gè)容器,用于存儲(chǔ)認(rèn)證和簽名證書,包括 TDE 萬能密鑰、PKI 私鑰、許可證和 SSL 需要的信托證書。借助 TDE,可以在服務(wù)器上使用錢夾來保護(hù) TDE 萬能密鑰。此外,Oracle 要求在 SSL 上通信的實(shí)體包含一個(gè)錢夾。除 Diffie-Hellman 外,該錢夾應(yīng)當(dāng)含有 X.509 版本 3 許可證、私鑰、信托證書列表。
Oracle 提供兩種類型錢夾:加密錢夾和自動(dòng)打開的錢夾。我們?yōu)?TDE 推薦加密錢夾(文件名為 ewallet.p12)。數(shù)據(jù)庫啟動(dòng)后和訪問 TDE 加密數(shù)據(jù)前,需手動(dòng)打開該錢夾。如果未打開該錢夾,查詢受 TDE 保護(hù)的數(shù)據(jù)時(shí)數(shù)據(jù)庫將返回錯(cuò)誤。自動(dòng)打開的錢夾(文件名是 cwallet.sso)在數(shù)據(jù)庫啟動(dòng)時(shí)會(huì)自動(dòng)打開。因此它適用于無人值守的 Data Guard 環(huán)境,在該環(huán)境中加密后的列會(huì)傳送到二級(jí)站點(diǎn)。
--------------------------------------------------------------------------------
TDE 中的密鑰管理功能如何?
TDE 中的密鑰管理包括下面的功能:
生成
存儲(chǔ)
替換
銷毀
生成 — 在 TDE 中生成萬能密鑰可以通過數(shù)據(jù)庫中的隨機(jī)數(shù)生成器 (RNG) 來完成,或者管理員可以自行提供最多 70 個(gè)字符的字符串。
存儲(chǔ) — 一種選擇是將萬能密鑰存儲(chǔ)在 Oracle 軟件錢夾中。該文件應(yīng)當(dāng)受到適當(dāng) OS 許可的保護(hù)。根據(jù) PKCS#5 標(biāo)準(zhǔn),錢夾使用錢夾口令進(jìn)行加密。錢夾口令不存儲(chǔ)在任何地方,在 Oracle Enterprise Manager 11g 中,該口令可以在任意數(shù)量的用戶或管理員間進(jìn)行分割,他們必須以正確的順序輸入各自口令片斷,而與此同時(shí)他們當(dāng)中無人知道整個(gè)口令。該口令甚至可以保護(hù)萬能密鑰不被擁有“root”權(quán)限的用戶使用。
另一種選擇是將用于列級(jí) TDE 的 TDE 萬能密鑰存儲(chǔ)在硬件安全模塊 (HSM) 上。Oracle 數(shù)據(jù)庫 11g 和 HSM 設(shè)備之間的通信基于標(biāo)準(zhǔn)的 PKCS#11 接口,它使得眾多 HSM 廠商都可與 Oracle 進(jìn)行互操作。一旦設(shè)備上生成了萬能密鑰,它將永遠(yuǎn)不會(huì)在未加密的情況下離開設(shè)備。
替換 — 通過簡單的命令就可以創(chuàng)建新的 TDE 萬能密鑰。傾刻間,數(shù)據(jù)庫中的所有列密鑰都會(huì)用舊的萬能密鑰解密然后用新的列密鑰進(jìn)行加密。應(yīng)用程序數(shù)據(jù)不會(huì)發(fā)生任何變化,因此該過程不會(huì)影響您數(shù)據(jù)庫的可用性。對(duì)于備份和恢復(fù)操作,過期的萬能密鑰存儲(chǔ)在錢夾中。
銷毀 — 使用命令行實(shí)用程序“mkstore”可對(duì)萬能密鑰進(jìn)行銷毀。使用“mkstore”前要對(duì)錢夾進(jìn)行備份,同時(shí)要謹(jǐn)慎使用該程序,因?yàn)楹苋菀讋h除當(dāng)前的萬能密鑰(該密鑰不能替換或重新生成)。
--------------------------------------------------------------------------------
如何保護(hù)錢夾和 TDE 萬能密鑰?
Oracle 數(shù)據(jù)庫 11g 允許在符合 PKCS#11 標(biāo)準(zhǔn)的 HSM 設(shè)備上存儲(chǔ)列級(jí) TDE 萬能密鑰,萬能密鑰永遠(yuǎn)不會(huì)在未加密的情況下離開設(shè)備。
對(duì)軟件錢夾(對(duì)于表空間加密和加密的轉(zhuǎn)儲(chǔ)文件以及使用基于軟件的萬能密鑰所創(chuàng)建的備份而言,它是必需的)的訪問應(yīng)當(dāng)通過文件級(jí)別的許可進(jìn)行限制。加密該錢夾(基于 PKCS#5)的口令應(yīng)當(dāng)包含超過 10 個(gè)字母和數(shù)字字符。軟件錢夾口令可通過 Oracle Wallet Manager 修改。改變錢夾口令不會(huì)影響 TDE 萬能密鑰(它們彼此無關(guān))。錢夾口令甚至可以阻止擁有“root”權(quán)限并可訪問錢夾文件的用戶獲取 TDE 萬能密鑰。
--------------------------------------------------------------------------------
Oracle Wallet Manager 在哪個(gè)默認(rèn)位置尋找錢夾?
在 Unix 和 Linux 中,其位置是
? /etc/ORACLE/WALLETS/
通常轉(zhuǎn)換為
? /etc/ORACLE/WALLETS/oracle
--------------------------------------------------------------------------------
可否使用 Oracle Wallet Manager (OWM) 為 TDE 創(chuàng)建加密錢夾和萬能密鑰
不能。如果您使用 Oracle Wallet Manager 創(chuàng)建加密錢夾,則無法包含 TDE 所需的萬能密鑰。只有以下 SQL 命令:
? SQL> alter system set encryption key identified by "wallet_password";
能夠創(chuàng)建軟件錢夾(若其不存在),并為其添加一個(gè)萬能密鑰。
? SQL> alter system set encryption key identified by "userID:password";
能夠在 HSM 設(shè)備內(nèi)創(chuàng)建一個(gè)萬能密鑰。用戶 ID 和口令是 HSM 設(shè)備內(nèi)所創(chuàng)建的用戶的證書,用于支持與 Oracle 數(shù)據(jù)庫的通信。在此之前,需要將 HSM 廠商的庫放到存檔的目錄中,同時(shí)需要在 sqlnet.ora 中將字符串“METHOD=FILE”改為“METHOD=HSM”。
如果您希望升級(jí)到某個(gè) HSM 設(shè)備后繼續(xù)使用相同的萬能密鑰,使用:
? SQL> alter system set encryption key identified by "userID:password"
???????????????????????????????????????
?????? migrate using "wallet_password";
?????????????????????????????????????
--------------------------------------------------------------------------------
如何創(chuàng)建自動(dòng)打開的錢夾?
自動(dòng)打開的錢夾 ('cwallet.sso') 需要利用現(xiàn)有的加密錢夾 ('ewallet.p12') 創(chuàng)建,這樣萬能密鑰就能在自動(dòng)打開的錢夾中使用了。
您可以在 Oracle Wallet Manager (OWM) 中打開加密錢夾,選中“Auto Login”復(fù)選框,然后選擇“Save”將自動(dòng)打開的錢夾寫到磁盤上,也可以使用命令行工具“orapki”:
? orapki wallet create -wallet -auto_login
兩種情況都要求提供錢夾口令。
--------------------------------------------------------------------------------
使用 Oracle 安全備份時(shí),如何避免將 Oracle TDE 錢夾備份到 RMAN 數(shù)據(jù)庫備份所在的磁帶上?
RMAN 將數(shù)據(jù)庫文件、重做日志等添到備份文件中,因此加密錢夾或自動(dòng)打開的錢夾不會(huì)成為數(shù)據(jù)庫備份的一部分。Oracle 安全備份 (OSB) 使用數(shù)據(jù)集來定義待備份的操作系統(tǒng)文件。OSB 自動(dòng)排除自動(dòng)打開的錢夾 ('cwallet.sso')。加密錢夾 ('ewallet.p12') 不會(huì)被自動(dòng)排除。您需要使用排除數(shù)據(jù)集語句來指定備份過程中需要跳過的文件:
?? exclude name ewallet.p12
有關(guān) EXCLUDE 關(guān)鍵字的詳細(xì)說明
--------------------------------------------------------------------------------
什么是 Oracle 安全備份 (OSB)?
OSB 為 Oracle 數(shù)據(jù)庫提供優(yōu)化的、高效的磁帶備份解決方案。OSB 能夠以加密的格式在磁帶上存儲(chǔ)數(shù)據(jù),從而防范備份磁帶被盜竊。
--------------------------------------------------------------------------------
可否使用 Oracle 安全備份對(duì)發(fā)送至磁盤的備份進(jìn)行加密?
不能。不過,Oracle RMAN 可與 Oracle Advanced Security 一起使用,以便對(duì)磁盤上的數(shù)據(jù)庫備份進(jìn)行加密。
--------------------------------------------------------------------------------
TDE 可否與 Data Guard 和 Oracle RAC 協(xié)同工作?
可以。TDE 可以與 Data Guard(物理或邏輯備份)和真正應(yīng)用集群 (RAC) 協(xié)同工作,但前提是,您必須將包含萬能密鑰的錢夾復(fù)制到其他實(shí)例中,同時(shí)要將各個(gè)實(shí)例上的錢夾打開,以使這些實(shí)例均可使用該萬能密鑰。
--------------------------------------------------------------------------------
是否有其他不能與列級(jí) TDE 協(xié)同工作的數(shù)據(jù)庫特性?
當(dāng)數(shù)據(jù)經(jīng)過 SQL 層時(shí),列級(jí) TDE 會(huì)對(duì)數(shù)據(jù)進(jìn)行透明地加密和解密。Oracle 的某些特性會(huì)跳過 SQL 層,因此不能利用 TDE:
? Materialized View Logs
? Sync. and async. CDC (change data capture)
? Classical LOBs (SecureFile LOBs?
??????????????????????????????????????? are supported)
?????????????????????????????????????
--------------------------------------------------------------------------------
可否使用帶有直接路徑的 SQL*Loader 將數(shù)據(jù)加載到包含加密列的表中?
可以。SQL*Loader 語法、.dat 文件和 .ctl 文件不會(huì)有任何變化。如果目標(biāo)表包含有加密的列,數(shù)據(jù)將在加載時(shí)進(jìn)行透明加密。以下簡單示例說明了如何使用帶有直接路徑的 SQL*Loader。只需將 ulcase6.sql 中的一行從
?? sal number(7,2),
更改為
?? sal number(7,2) encrypt no salt,
并使用 SQL*Loader 的正確語法:
?? sqlldr USERID=scott/tiger CONTROL=ulcase6.ctl LOG=ulcase6.log DIRECT=TRUE
--------------------------------------------------------------------------------
在重新生成萬能密鑰和/或列密鑰后如何恢復(fù)數(shù)據(jù)?
?
在創(chuàng)建備份后到將其恢復(fù)前,萬能密鑰已發(fā)生更改。
在這種情況下,恢復(fù)包含加密列的表對(duì)用戶而言是透明的。TDE 錢夾對(duì)過期萬能密鑰的歷史進(jìn)行了記錄,同時(shí)自動(dòng)將正確的萬能密鑰應(yīng)用到備份數(shù)據(jù)上。這就是為什么經(jīng)常備份錢夾(備份到與加密數(shù)據(jù)不同的位置)如此重要的原因。
在創(chuàng)建備份后到將其恢復(fù)前,全部或部分加密列的列密鑰已重新生成:
如果已使用 RMAN 在磁盤上創(chuàng)建備份文件,除非指示 RMAN 執(zhí)行加密操作,否則文件不會(huì)被加密。當(dāng)文件被讀取回時(shí),它的列會(huì)使用新的列密鑰重新加密,而不論 RMAN 是否對(duì)文件進(jìn)行了加密。
--------------------------------------------------------------------------------
如何加密超大型表(包含數(shù)十億行)中的列?
對(duì)現(xiàn)有表中的列進(jìn)行加密僅允許對(duì)該表進(jìn)行 Read 訪問,而不允許進(jìn)行 DML 操作。由于有數(shù)十億行,這一可用性有限的窗口會(huì)持續(xù)很長時(shí)間。聯(lián)機(jī)重新定義僅需要一個(gè)持續(xù)時(shí)間非常短的窗口對(duì)原始表進(jìn)行鎖定。該時(shí)間長度與加密數(shù)據(jù)的數(shù)量或重新定義的復(fù)雜性無關(guān),并且對(duì)用戶和應(yīng)用程序是透明的。
--------------------------------------------------------------------------------
加密列中的現(xiàn)有數(shù)據(jù)后再查看數(shù)據(jù)庫文件,有時(shí)仍能看到某些明文值。為什么?
這種情況與即使已刪除表或文件、但仍然會(huì)在磁盤上看到數(shù)據(jù)的情況相同。在一個(gè)表的生命周期內(nèi),數(shù)據(jù)可能會(huì)在表空間內(nèi)分段、重新整理、排序、復(fù)制和移動(dòng)。這會(huì)在數(shù)據(jù)庫文件中留下數(shù)據(jù)的“虛副本”。在加密現(xiàn)有列時(shí),僅最新的“有效”副本被加密,這就將舊的明文版本留在了“虛副本”中。如果直接訪問包含表空間的數(shù)據(jù)文件,從而繞過數(shù)據(jù)庫的訪問控制(例如,帶有十六進(jìn)制編輯器的數(shù)據(jù)庫),那么在那些塊被數(shù)據(jù)庫覆蓋之前,有時(shí)就會(huì)看到舊的明文值。為使風(fēng)險(xiǎn)最小化,請遵循下面的建議:
在新的數(shù)據(jù)文件中創(chuàng)建一個(gè)新的表空間 (CREATE TABLESPACE ... )
對(duì)原始表空間和數(shù)據(jù)文件中的明文值進(jìn)行加密 (ALTER TABLE ...ENCRYPT)
對(duì)包含加密列的所有表執(zhí)行步驟 2
將原始表空間中的所有表移到新的數(shù)據(jù)文件中 (ALTER TABLE ....MOVE... )
刪除原始表空間 (DROP TABLESPACE)不要使用“and datafiles”參數(shù),Oracle 推薦使用更強(qiáng)大的方法進(jìn)行 OS 級(jí)操作,參見步驟 6
針對(duì)您的平臺(tái)使用“shred”、“eraser”、“SDelete”或其他命令,以便在 OS 級(jí)別上刪除舊數(shù)據(jù)文件
?
建議您使用第 6 步操作來降低數(shù)據(jù)庫文件出現(xiàn)虛副本的概率,不論這些副本是由操作系統(tǒng)生成還是由存儲(chǔ)固件生成。
--------------------------------------------------------------------------------
?
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/26736162/viewspace-1274191/,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任。
總結(jié)
以上是生活随笔為你收集整理的Oracle中对列加密的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Netty5中的4种解码器
- 下一篇: html如何添加外链图片代码,Media