王鋒 張新建
中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007
數(shù)據(jù)庫系統(tǒng)作為各類信息系統(tǒng)中的數(shù)據(jù)支撐軟件發(fā)揮著越來越重要的作用。隨著大型信息系統(tǒng)建設(shè)中數(shù)據(jù)共享程度的不斷提高,數(shù)據(jù)訪問的安全成為一個(gè)比較突出的問題擺在我們的面前。雖然各種數(shù)據(jù)庫管理系統(tǒng)本身提供了一整套的信息安全管理策略,但在某些保密要求高的特殊信息系統(tǒng)建設(shè)環(huán)境下,僅僅單純利用這些安全管理策略是不夠的;另一方面,作為特殊的信息系統(tǒng),如何防止應(yīng)用以及系統(tǒng)管理人員(包括數(shù)據(jù)庫管理人員)對(duì)數(shù)據(jù)庫中信息的隨意訪問也是至關(guān)重要的。本文基于虛擬用戶管理的概念介紹了一種有效解決以上問題的數(shù)據(jù)庫系統(tǒng)口令安全解決方案的設(shè)計(jì)。
創(chuàng)建和實(shí)施安全的過程有助于保護(hù)工程中最重要的財(cái)富---數(shù)據(jù)。數(shù)據(jù)安全性是信息系統(tǒng)建設(shè)中數(shù)據(jù)庫使用范疇要考慮的重要因素。數(shù)據(jù)安全的含義包括信息不應(yīng)該透露給未經(jīng)授權(quán)的用戶、只允許授權(quán)用戶可以修改數(shù)據(jù)、用戶不允許存取不必要的數(shù)據(jù)。這三個(gè)方面在建立數(shù)據(jù)庫安全系統(tǒng)時(shí)是最基本的考慮因素。
(1) 數(shù)據(jù)安全包括在對(duì)象級(jí)控制數(shù)據(jù)庫訪問和使用的機(jī)制;
(2) 數(shù)據(jù)安全策略主要由你想要為你的數(shù)據(jù)庫數(shù)據(jù)建立的安全等級(jí)決定;
(3) 數(shù)據(jù)的安全性考慮應(yīng)該基于數(shù)據(jù)的重要性;
(4) 數(shù)據(jù)安全的一些實(shí)現(xiàn)方法包括系統(tǒng)對(duì)象特權(quán)以及角色管理;
(5) 細(xì)粒度存取控制。細(xì)粒度存取控制最簡單的情況是在SQL語句中加了一個(gè)WHERE條件,用它來限制用戶對(duì)表和視圖里面的行數(shù)據(jù)的存取;
(6) 應(yīng)用程序上下文控制。應(yīng)用程序上下文是一個(gè)安全數(shù)據(jù)緩沖,用來存儲(chǔ)存取控制決定的信息。
用戶安全策略指一般用戶、最終用戶、管理員、應(yīng)用程序開發(fā)員和應(yīng)用程序管理員的安全策略。
(1) 一般用戶的安全性。如果用戶是通過數(shù)據(jù)庫進(jìn)行用戶身份驗(yàn)證,那么建議使用口令加密的方式與數(shù)據(jù)庫進(jìn)行連接。為了更好地保護(hù)口令的機(jī)密性,可以為客戶/服務(wù)器和服務(wù)器/服務(wù)器連接配置加密口令;
(2) 最終用戶的安全性。可以使用“角色”對(duì)最終用戶進(jìn)行特權(quán)管理;
(3) 數(shù)據(jù)庫管理員安全性策略。保護(hù)作為 sys和 system用戶的連接;保護(hù)管理員與數(shù)據(jù)庫的連接;使用角色對(duì)管理員特權(quán)進(jìn)行管理;
(4) 應(yīng)用程序開發(fā)者的安全性策略。安全管理員可以授權(quán)應(yīng)用程序開發(fā)者建立所需要的對(duì)象,或只將建立對(duì)象的特權(quán)授予某個(gè)數(shù)據(jù)庫管理員,讓他負(fù)責(zé)建立對(duì)象。這要依賴于應(yīng)用程序所遵循的模式是自由開發(fā)還是受控開發(fā);管理員通過建立角色,給角色授權(quán)來管理典型應(yīng)用程序開發(fā)者所需要的特權(quán),但同時(shí)應(yīng)注意到對(duì)象權(quán)限很少授予應(yīng)用程序開發(fā)者。
數(shù)據(jù)庫安全系統(tǒng)依賴于口令,要求口令任何時(shí)候都保持秘密。但口令經(jīng)常遭到偷竊、偽造和誤用。一般采用的安全策略是概要文件控制。概要文件是一個(gè)規(guī)定了資源限度的數(shù)據(jù)庫實(shí)體,它可以控制數(shù)據(jù)庫和系統(tǒng)資源的使用。
數(shù)據(jù)庫審計(jì)與操作系統(tǒng)審計(jì)的功能一樣。審計(jì)跟蹤記錄操作、登錄、非法請(qǐng)求并分析它們。同時(shí)它也檢測(cè)錯(cuò)誤的違反和補(bǔ)償。數(shù)據(jù)庫具有審計(jì)發(fā)生在其內(nèi)部的所有操作的能力。它使得數(shù)據(jù)庫能夠記錄何時(shí)發(fā)生的操作以及是誰在使用該操作等信息。利用這些信息,可以跟蹤是誰在破壞數(shù)據(jù)庫,是誰的誤操作以及是誰對(duì)數(shù)據(jù)庫進(jìn)行操作。數(shù)據(jù)庫具有審計(jì)發(fā)生在其內(nèi)部的所有操作---包括注冊(cè)企圖、對(duì)象訪問和數(shù)據(jù)庫操作的能力,審計(jì)的結(jié)果存儲(chǔ)在數(shù)據(jù)庫的審計(jì)表中。
在上面的介紹中不難發(fā)現(xiàn)商用數(shù)據(jù)庫管理系統(tǒng)一整套的安全管理策略中,口令管理策略實(shí)際上處于核心地位,因?yàn)槿绻诹罟芾聿缓玫脑?,任何人可以以任何身份訪問系統(tǒng)的數(shù)據(jù)庫,從而造成信息的泄露;另一方面,從數(shù)據(jù)庫系統(tǒng)管理本身而言,無法防止應(yīng)用開發(fā)人員訪問不必要的數(shù)據(jù)。
縱觀現(xiàn)有主流商用數(shù)據(jù)庫管理系統(tǒng)本身的口令管理方式,基本上是在數(shù)據(jù)庫中創(chuàng)建一個(gè)schema/user時(shí)指定對(duì)應(yīng)的口令,這種口令將會(huì)以加密的形式存儲(chǔ)在數(shù)據(jù)庫的數(shù)據(jù)字典目錄中,以后如果需要修改,只能通過底層SQL語句進(jìn)行。這種口令存儲(chǔ)與管理機(jī)制可以理解為“死口令”或者“靜態(tài)口令”。在應(yīng)用程序訪問數(shù)據(jù)時(shí),需要預(yù)先知道對(duì)應(yīng)模式/用戶的口令,如果沒有動(dòng)態(tài)獲取口令的方法,只能在程序中人為寫死,如果以后數(shù)據(jù)庫口令發(fā)生變化,應(yīng)用程序則需要重新編譯,給軟件維護(hù)帶來一定的不便,更無法達(dá)到具有某些特殊應(yīng)用的系統(tǒng)對(duì)數(shù)據(jù)庫信息安全要求的高度,因?yàn)榭诹钣锌赡軙?huì)被創(chuàng)建 schema/user的系統(tǒng)管理人員無意或者有意的泄露?;诖?,在數(shù)據(jù)庫原有口令管理策略的基礎(chǔ)上引入虛擬用戶管理的概念來實(shí)現(xiàn)更高級(jí)別的口令安全和應(yīng)用訪問的靈活性。
虛擬用戶設(shè)計(jì)的初衷是為了隱蔽數(shù)據(jù)庫用戶,使應(yīng)用層數(shù)據(jù)庫程序訪問數(shù)據(jù)庫時(shí)使用的用戶(姑且稱為“偽用戶或者應(yīng)用層用戶”)與數(shù)據(jù)庫用戶分離,通過創(chuàng)建映射表建立數(shù)據(jù)庫真實(shí)用戶與虛擬用戶之間的對(duì)應(yīng)關(guān)系。在使用數(shù)據(jù)庫應(yīng)用訪問數(shù)據(jù)庫時(shí),只需給出應(yīng)用層用戶,然后由虛擬用戶代理軟件根據(jù)提供的應(yīng)用層用戶去“動(dòng)態(tài)獲取”由守護(hù)進(jìn)程虛擬用戶服務(wù)管理的滯留在內(nèi)存中的動(dòng)態(tài)的數(shù)據(jù)庫用戶與口令以及相應(yīng)的連接字符串信息。
應(yīng)用層用戶與數(shù)據(jù)庫用戶(代理用戶)的映射關(guān)系及其管理由虛擬用戶管理軟件實(shí)現(xiàn)。應(yīng)用層用戶與代理用戶映射關(guān)系的修改通過編制特定的軟件調(diào)用虛擬用戶管理軟件的API接口實(shí)現(xiàn),應(yīng)用層用戶對(duì)代理用戶的用戶名和口令一無所知,在生成新的應(yīng)用層用戶的同時(shí)在數(shù)據(jù)庫中生成一代理用戶并建立兩者之間的映射關(guān)系,通過虛擬用戶管理軟件API接口將映射關(guān)系寫入映射表。代理用戶的用戶名和口令由虛擬用戶軟件通過特定的算法隨機(jī)生成并通過特定加密算法進(jìn)行加密,其用戶名和口令均長達(dá) 30位,由于應(yīng)用層用戶并不直接接觸數(shù)據(jù)庫,也不知道對(duì)應(yīng)的代理用戶的用戶名和口令,因此杜絕了應(yīng)用層用戶直接登錄數(shù)據(jù)庫的可能性,同時(shí)屏蔽了數(shù)據(jù)庫的真實(shí)用戶名和口令。
基于虛擬用戶管理的用見圖1。
圖1 基于虛擬用戶管理的應(yīng)用示例
如圖1所示,應(yīng)用程序在訪問數(shù)據(jù)庫之前,通過虛擬用戶服務(wù)程序獲取存儲(chǔ)在映射表中的代理用戶及其相應(yīng)的連接信息,在這個(gè)過程中,連接信息的細(xì)節(jié)對(duì)應(yīng)用層是透明的。
虛擬用戶管理軟件分為三部分:一部分為虛擬用戶管理服務(wù),其以守護(hù)進(jìn)程的方式駐留在數(shù)據(jù)庫服務(wù)器上運(yùn)行,主要任務(wù)是接收來自于虛擬用戶管理服務(wù)代理接口的請(qǐng)求,對(duì)映射表進(jìn)行操作,并將執(zhí)行結(jié)果返回虛擬用戶管理服務(wù)代理接口;一部分為虛擬用戶管理代理API,由應(yīng)用開發(fā)人員調(diào)用,主要任務(wù)是接收來自客戶端的請(qǐng)求并轉(zhuǎn)發(fā)至虛擬用戶管理服務(wù),同時(shí)將結(jié)果返回至客戶端;另一部分是虛擬用戶初始化模塊,主要完成虛擬用戶的初始化創(chuàng)建,構(gòu)建映射表,再生成映射關(guān)系以及口令管理。虛擬用戶管理代理接口與虛擬用戶管理服務(wù)之間通過SOCKET進(jìn)行通信。
虛擬用戶管理軟件的組成見圖2。
圖2 虛擬用戶管理軟件的組成
2.2.1 虛擬用戶管理服務(wù)
由于映射表中存放有虛擬用戶的用戶名和口令,因此,其密級(jí)比較高,對(duì)于它的管理也非常嚴(yán)格。映射表應(yīng)集中存放在數(shù)據(jù)庫服務(wù)器上,在操作系統(tǒng)級(jí)對(duì)該文件的存取權(quán)限進(jìn)行控制,保證只有超級(jí)用戶對(duì)該文件具有讀寫權(quán)限。映射表采用加密方式存放。映射表中存放的基本信息應(yīng)包含應(yīng)用層用戶、代理用戶(數(shù)據(jù)庫用戶)、口令、網(wǎng)絡(luò)服務(wù)名稱以及其他的一些連接信息。虛擬用戶管理服務(wù)的處理流程見圖3。
圖3 虛擬用戶管理服務(wù)的處理流程
內(nèi)部接口及描述(如表1):
調(diào)用方:虛擬用戶管理服務(wù)
接口格式(函數(shù)接口):
表1 虛擬用戶管理服務(wù)的內(nèi)部處理接口
2.2.2 虛擬用戶管理代理API
虛擬用戶管理代理API提供一套訪問虛擬用戶服務(wù)的函數(shù)接口,主要由應(yīng)用程序在每次連接數(shù)據(jù)庫之前調(diào)用以便獲取必要的連接信息。管理代理API被調(diào)用后試圖通過socket與數(shù)據(jù)庫服務(wù)器上駐留的虛擬用戶管理服務(wù)建立連接,并將相關(guān)應(yīng)用層用戶名傳給虛擬用戶管理服務(wù)進(jìn)程,虛擬用戶服務(wù)進(jìn)程根據(jù)獲得的應(yīng)用層用戶名搜尋映射表找出對(duì)應(yīng)的映射關(guān)系條目,然后將該條目下對(duì)應(yīng)的數(shù)據(jù)庫用戶的真實(shí)用戶名、口令、網(wǎng)絡(luò)服務(wù)名以及其他的一些連接信息返回給虛擬用戶管理代理API,進(jìn)而返回給應(yīng)用調(diào)用者。
虛擬用戶管理代理API的處理流程見圖4。
圖4 用戶管理代理API處理流程
接口及描述:
在虛擬用戶管理代理API提供的接口中,最核心的就是獲取連接信息的接口。
int GetDBConnInfo(char *keyvalue,char *username,char*agentuser,char *password,char *netservice )。
該接口在windows和unix環(huán)境上依賴不同的庫都可以運(yùn)行。為了進(jìn)一步加強(qiáng)該接口的調(diào)用安全,在參數(shù)中增加注冊(cè)碼驗(yàn)證參數(shù),確保調(diào)用此接口的應(yīng)用已獲得安全授權(quán)。
2.2.3 虛擬用戶初始化
虛擬用戶初始化模塊主要完成虛擬用戶與真實(shí)用戶映射關(guān)系的生成及再生成。該模塊的運(yùn)行結(jié)果將會(huì)生成虛擬用戶管理服務(wù)運(yùn)行時(shí)所需讀取的映射表文件。另外,該模塊也可以定期重新生成映射關(guān)系從而定期更改數(shù)據(jù)庫用戶的口令。
虛擬用戶初始化的處理流程見圖5。
圖5 虛擬用戶初始化
以上詳細(xì)介紹了基于虛擬用戶服務(wù)以及虛擬用戶代理API的數(shù)據(jù)庫連接信息獲取機(jī)制,這種方式使數(shù)據(jù)庫用戶的口令完全由虛擬用戶服務(wù)管理與維護(hù),對(duì)應(yīng)用開發(fā)人員透明。應(yīng)用開發(fā)人員在開發(fā)數(shù)據(jù)庫應(yīng)用時(shí),只需調(diào)用提供的虛擬用戶代理API來獲取連接信息即可??诹畋挥成潢P(guān)系儲(chǔ)存與管理,使用人員無法獲取口令,無法使用SQL*PLUS等數(shù)據(jù)庫訪問軟件從底層訪問數(shù)據(jù)庫。映射關(guān)系及口令可由系統(tǒng)維護(hù)人員定期運(yùn)行映射表初始化軟件更新,在此過程中,由于系統(tǒng)維護(hù)人員使用的是模塊化的維護(hù)工具,所以他們也無法獲取映射關(guān)系與口令信息。保證獲取口令(以及其它必要的連接信息)的惟一途徑是基于虛擬用戶管理服務(wù)的虛擬用戶代理API。
基于虛擬用戶思想的數(shù)據(jù)庫用戶/口令管理機(jī)制可以很好的實(shí)現(xiàn)數(shù)據(jù)庫底層用戶與應(yīng)用層用戶的分離,實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫口令進(jìn)行動(dòng)態(tài)管理,為很多數(shù)據(jù)庫應(yīng)用在連庫環(huán)節(jié)提供了更高的安全性和更好的靈活性,同時(shí)也能杜絕一般用戶試圖通過SQL*PLUS或者Toad等第三方商用軟件隨意訪問數(shù)據(jù)庫的可能性,為大型信息系統(tǒng)建設(shè)中數(shù)據(jù)庫的安全訪問提供了比較可靠的解決方案。
[1]Thomas Kyte著,袁勤勇,張玉魁等譯.Oracle專家高級(jí)編程[M].北京:清華大學(xué)出版社.2002.
[2]Thomas Kyte著,鐘鳴,郝玉潔等譯.Oracle高效設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社.2006.
[3]Doug Stuns,Matthew Weishan 著,趙軍鎖,孫文明,鄧波等譯.Oracle9i DBA基礎(chǔ)Ⅱ?qū)W習(xí)指南.北京:電子工業(yè)出版社.2002.
[4]談竹奎,況志軍著.Oracle9i數(shù)據(jù)庫管理員高級(jí)技術(shù)指南.北京:中國鐵道出版社.2003.