Oracle如何對(duì)數(shù)據(jù)進(jìn)行加密

Oracle應(yīng)用服務(wù)器使用Sec_Manager.Secure_Package 程序包中的例程存儲(chǔ)加密格式的私人數(shù)據(jù)。根據(jù)create_packages.sql中描述的定制加密程序包的定義,對(duì)CARD_NO 列的訪問(wèn)已被函數(shù)調(diào)用所取代,該函數(shù)調(diào)用的參數(shù)是要存儲(chǔ)在列中的值以及用于數(shù)據(jù)解密的密鑰。

例如,要將“a1b2c3d4”用作加密密鑰,必須將最初如下所示的典型INSERT 語(yǔ)句

insert into CUSTOMER (NAME, CARD_NO) 
values ('Jane Doe', '1234123412341234');

轉(zhuǎn)換為:

insert into CUSTOMER (NAME, CARD_NO) 
values ('Jane Doe', Sec_Manager.Secure_Package.Secure_Data('1234123412341234','a1b2c3d4'));
使用例程讀取加密格式的數(shù)據(jù)

同樣,Oracle 還使用Sec_Manager.Secure_Package 中的例程讀取加密格式的數(shù)據(jù),如 CARD_NO 數(shù)據(jù)的 Secure_Package.Clear_Data,然后利用插入值時(shí)使用的加密密鑰來(lái)以明文格式取回受保護(hù)信息。這種情況下,必須將最初為如下所示的典型SELECT語(yǔ)句:

select NAME, CARD_NO 
from CUSTOMER;

修改為:

select NAME, Sec_Manager.Secure_Package.Clear_Data(CARD_NO,'a1b2c3d4') 
from CUSTOMER;

完成開(kāi)發(fā)后將升級(jí)代碼加密

當(dāng)完成所有開(kāi)發(fā)(希望由值得信任的人員完成)后,還可以將升級(jí)后的代碼加密,以便甚至連升級(jí)腳本的數(shù)據(jù)庫(kù)管理員都無(wú)法確切了解安全性的實(shí)現(xiàn)方法。通過(guò)Oracle 提供的實(shí)用程序?qū)崿F(xiàn)加密,可以使用如下所示命令:

wrap iname=Secure_Package.sql oname=Secure_Package.sec

打包后,可以在SQL*Plus 提示符后象執(zhí)行任何明文腳本一樣執(zhí)行Secure_Package.sec,且Oracle 引擎還將對(duì)其進(jìn)行解釋。同一概念也可應(yīng)用于任何其他與安全性相關(guān)的 PL*SQL 腳本。此方法不但禁止了參與代碼升級(jí)的人員(數(shù)據(jù)庫(kù)管理員、開(kāi)發(fā)人員、支持和管理人員)查看程序包內(nèi)容,而且程序包內(nèi)容還以加密格式部署到數(shù)據(jù)庫(kù)中,因此以后要嘗試破解這些程序包內(nèi)容是很難的。

入侵者必須破解加密算法才能查看程序包內(nèi)容

即使具有數(shù)據(jù)庫(kù)管理員權(quán)限的入侵者將CONNECT 權(quán)限授予安全對(duì)象所有者Sec_Manager 以查看保護(hù)和加密程序包的內(nèi)容,也不會(huì)有任何明文會(huì)存儲(chǔ)在這些對(duì)象的數(shù)據(jù)庫(kù)中。由于Oracle 未提供任何“解包”實(shí)用程序,因此入侵者將必須破解Oracle 的加密算法才能夠查看程序包內(nèi)容。

使用內(nèi)置的數(shù)據(jù)庫(kù)審計(jì)功能訪問(wèn)受保護(hù)數(shù)據(jù)

即使所有安全措施都已經(jīng)到位了,了解是否對(duì)機(jī)密數(shù)據(jù)進(jìn)行了未授權(quán)訪問(wèn)仍很重要。最簡(jiǎn)單的方法是使用內(nèi)置的數(shù)據(jù)庫(kù)審計(jì)功能在表級(jí)別監(jiān)視對(duì)受保護(hù)數(shù)據(jù)的訪問(wèn)(SELECT、INSERT、UPDATE、DELETE),而不管請(qǐng)求事務(wù)的數(shù)據(jù)庫(kù)連接如何,命令如下:

audit insert, update, select on SHIP2004.CUSTOMER;

使用Oracle Fine Grained Auditing (FGA),您可以進(jìn)一步改進(jìn)訪問(wèn)監(jiān)視以最小化處理開(kāi)銷并提供有意義的信息。enable_fga.sql 中提供的示例使用DBMS_FGA 程序包啟用基本的審計(jì)策略。數(shù)據(jù)庫(kù)中的內(nèi)置審計(jì)機(jī)制禁止用戶繞過(guò)審計(jì),從而確保了它的精確性??梢栽贒BA_FGA_AUDIT_TRAIL 視圖以及 DBA_COMMON_AUDIT_TRAIL 視圖中查看審計(jì)記錄,在策略指定 audit_trail = DBMS_FGA.DB_EXTENDED 的情況下,審計(jì)記錄甚至可以包含 SQLBINDSQLTEXT信息。

可以使用 Oracle 提供的功能輕松地增強(qiáng)此處提供的示例,從而加入電子郵件或?qū)ず魴C(jī)通知和激活條件,以只生成特定事件的審計(jì)記錄。

小知識(shí)之腳本:

腳本(script)是使用一種特定的描述性語(yǔ)言,依據(jù)一定的格式編寫的可執(zhí)行文件,又稱作宏或批處理文件。