白 斌
摘要:為了增強(qiáng)WEB數(shù)據(jù)庫的安全,本文主要介紹了通過QDBC安全訪問接口的設(shè)計(jì)與實(shí)現(xiàn),在基于關(guān)系數(shù)據(jù)庫的安全增強(qiáng)器中對(duì)標(biāo)準(zhǔn)ODBC訪問接口做了擴(kuò)充。
關(guān)鍵詞:WEB數(shù)據(jù)庫;ODBC;安全增強(qiáng)器
1引言
在網(wǎng)絡(luò)發(fā)展的早期。由于用戶對(duì)安全還不是很重視,原來數(shù)據(jù)庫的結(jié)構(gòu)是客戶機(jī)ODBC-數(shù)據(jù)庫服務(wù)器3層體系結(jié)構(gòu)。隨著現(xiàn)代網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)庫安全越來越重要,為了提升網(wǎng)絡(luò)數(shù)據(jù)庫的安全,本文提出從客戶機(jī) -ODBC一安全增強(qiáng)器一數(shù)據(jù)庫服務(wù)器這樣的一個(gè)4層結(jié)構(gòu)。使得所有使用ODBC訪問接口的應(yīng)用系統(tǒng)對(duì)數(shù)據(jù)庫的訪問操作都將首先被提交給安全增強(qiáng)器接受安全檢查,只有檢查通過后才能訪問后臺(tái)的RDBMS??紤]到目前在國(guó)內(nèi)流行的RDBMS如Oracle等都僅只有C2級(jí)的安全,在安全增強(qiáng)系統(tǒng)中實(shí)現(xiàn)的安全模塊只需提供強(qiáng)制訪問控制(MAC)和B1級(jí)所要求的擴(kuò)充審計(jì)功能,就可以將原來只具有C2級(jí)安全的數(shù)據(jù)庫管理系統(tǒng)的安全性能增強(qiáng)到B1級(jí),從而可以滿足對(duì)數(shù)據(jù)安全要求較高領(lǐng)域的應(yīng)用需要。由于對(duì)安全模塊的操作需要有一個(gè)擴(kuò)充的數(shù)據(jù)安全子語言,而標(biāo)準(zhǔn)的ODBC并不具備處理該語言的能力,因此需要對(duì)ODBC所使用的SOL語言進(jìn)行適當(dāng)?shù)臄U(kuò)充,以增加對(duì)安全操作命令的處理能力。
2WEB數(shù)據(jù)庫安全性的內(nèi)容
WEB數(shù)據(jù)庫的安全性包括:機(jī)密性、完整性和可用性,數(shù)據(jù)庫在3個(gè)層次上的異構(gòu),客戶機(jī)、服務(wù)器通過開放的網(wǎng)絡(luò)環(huán)境,跨不同硬件和軟件平臺(tái)通信,數(shù)據(jù)庫安全問題在異構(gòu)環(huán)境下變得更加復(fù)雜。而且異構(gòu)環(huán)境的系統(tǒng)具有可擴(kuò)展性。能管理分布或聯(lián)邦數(shù)據(jù)庫環(huán)境,每個(gè)節(jié)點(diǎn)服務(wù)器還能自治實(shí)行集中式安全管理和訪問控制,對(duì)自己創(chuàng)建的用戶、規(guī)則、客體進(jìn)行安全管理。如:由DBA或安全管理員執(zhí)行本部門、本地區(qū)或整體的安全策略,授權(quán)特定的管理員管理各組應(yīng)用程序、用戶、規(guī)則和數(shù)據(jù)庫。因此訪問控制和安全管理尤為重要a異構(gòu)環(huán)境的數(shù)據(jù)庫安全策略有:全局范圍的身份驗(yàn)證;全局的訪問控制,以支持各類局部訪問控制(自主和強(qiáng)制訪問控制):全局完整性控制;網(wǎng)絡(luò)安全管理,包括網(wǎng)絡(luò)信息加密、網(wǎng)絡(luò)入侵防護(hù)和檢測(cè)等。
3WEB數(shù)據(jù)庫的安全增強(qiáng)器基本原理
在當(dāng)前,數(shù)據(jù)庫應(yīng)用系統(tǒng)和關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)之間的交互—般都是采用典型的客戶機(jī),服務(wù)器(C/S)結(jié)構(gòu),通過ODBC(Open Database Connectivity)來進(jìn)行的。其中應(yīng)用系統(tǒng)和ODBC驅(qū)動(dòng)程序管理器放在客戶機(jī)上,提出對(duì)數(shù)據(jù)庫訪問的請(qǐng)求,而RDBMS放在后臺(tái)服務(wù)器上,提供服務(wù),ODBC通過網(wǎng)絡(luò)傳輸負(fù)責(zé)這兩者之間的訪問命令和結(jié)果數(shù)據(jù)的交互。由此看出,如果能夠截獲應(yīng)用系統(tǒng)通過ODBC發(fā)送到數(shù)據(jù)庫服務(wù)器的訪問命令,就可以在ODBC和第三方的RDBMS之間加入我們提供的安全模塊,以達(dá)到增強(qiáng)數(shù)據(jù)庫系統(tǒng)的安全功能的目的。目前的數(shù)據(jù)庫系統(tǒng)具有3種標(biāo)準(zhǔn)形式的網(wǎng)絡(luò)訪問接口:ODBC接口、JDBC接口和專用接口,而目前大部分應(yīng)用程序約90%以上均使用ODBC接口來連接后臺(tái)數(shù)據(jù)庫。
基于上述設(shè)計(jì)思想,一個(gè)通用RDBMS的安全增強(qiáng)器主要由3部分內(nèi)容組成:
(1)ODBG接口:該接口是連接客戶端軟件與后臺(tái)RDBMS的標(biāo)準(zhǔn)接口,通過網(wǎng)絡(luò)傳輸負(fù)責(zé)維護(hù)這兩者之間命令和數(shù)據(jù)的交互。
(2)安全模塊:該模塊實(shí)現(xiàn)強(qiáng)制訪問控制檢查及安全審計(jì)功能,ODBC將客戶端應(yīng)用的SQL訪問請(qǐng)求傳送到服務(wù)器端后,由安全模塊負(fù)責(zé)對(duì)SQL語句執(zhí)行安全檢查,只有在主體和客體的安全級(jí)別符合規(guī)定的訪問要求后才能進(jìn)入RDBMS進(jìn)行相應(yīng)操作。同時(shí)安全模塊還將負(fù)責(zé)此次訪問的安全審計(jì)工作。
(3)與RDBMS的接口模塊:該模塊負(fù)責(zé)將經(jīng)過安全檢查的SQL語句轉(zhuǎn)換成RDBMS的標(biāo)準(zhǔn)語句并進(jìn)入數(shù)據(jù)庫進(jìn)行相應(yīng)的訪問操作。為了確保應(yīng)用系統(tǒng)-ODBC-安全模塊一數(shù)據(jù)庫服務(wù)器訪問通道的封閉,與RDBMS的接口模塊采用的是后臺(tái)數(shù)據(jù)庫的非網(wǎng)絡(luò)訪問接口,并封閉其原有的網(wǎng)絡(luò)訪問接口。
4ODBC的結(jié)構(gòu)及主要內(nèi)容
ODBC的4個(gè)組成部分:應(yīng)用程序、驅(qū)動(dòng)程序管理器、驅(qū)動(dòng)程序、數(shù)據(jù)源以及每部分的功能。ODBC驅(qū)動(dòng)程序是Microsoft推出的訪問數(shù)據(jù)庫的統(tǒng)一接口。這個(gè)接口提供了最大限度的互操作性,每一種對(duì)應(yīng)某種DBMS的拓?fù)浣Y(jié)構(gòu),它們分別是一級(jí)驅(qū)動(dòng)器、二級(jí)驅(qū)動(dòng)器、三級(jí)及多級(jí)驅(qū)動(dòng)器。一級(jí)驅(qū)動(dòng)器可以說是一種單機(jī)結(jié)構(gòu),數(shù)據(jù)庫和驅(qū)動(dòng)器放在同一臺(tái)機(jī)器中,其程序設(shè)計(jì)接口由文件I/O構(gòu)成,如Access、Foxpro、dBase等。二級(jí)驅(qū)動(dòng)器就是目前流行的客戶/服務(wù)器系統(tǒng),如Oracle、Sybase、SQL Serve等。三級(jí)驅(qū)動(dòng)器就是在二級(jí)驅(qū)動(dòng)器的客戶和服務(wù)器之間增加一個(gè)網(wǎng)關(guān)服務(wù)器,而這個(gè)網(wǎng)關(guān)服務(wù)器可以與多個(gè)DBMS相連,而網(wǎng)關(guān)服務(wù)器將用戶的請(qǐng)求加載適當(dāng)?shù)腛DBC驅(qū)動(dòng)器后發(fā)送到相應(yīng)的數(shù)據(jù)庫服務(wù)器上??紤]到目前的需要,在基于RDBMS的安全增強(qiáng)器中,ODBC的實(shí)現(xiàn)采用二級(jí)驅(qū)動(dòng)器方式。
在基于RDBMS的安全增強(qiáng)器中,為了保證整個(gè)數(shù)據(jù)庫系統(tǒng)的安全性,要求安全模塊本身就構(gòu)成一個(gè)安全子系統(tǒng),即安全模塊的操作命令也必須受到強(qiáng)制訪問控制的檢查和進(jìn)行安全審計(jì)。這就要求OD8C能夠處理數(shù)據(jù)安全子語言的訪問命令,但是在ODBC的標(biāo)準(zhǔn)規(guī)范中。只有對(duì)標(biāo)準(zhǔn)SQL語句的操作,并沒有包含任何有關(guān)B1級(jí)安全的命令函數(shù),因此必須在ODBC許可的范圍內(nèi)對(duì)ODBC進(jìn)行適當(dāng)?shù)臄U(kuò)展,以增加對(duì)數(shù)據(jù)安全子語言的處理能力。使得任何對(duì)安全模塊的操作命令都必須經(jīng)由ODBC發(fā)送到安全模塊,以達(dá)到增強(qiáng)系統(tǒng)安全的目的。
為提供對(duì)安全模塊的操作與管理,對(duì)標(biāo)準(zhǔn)ODBCSOL語言的語法成分進(jìn)行了如下擴(kuò)充:
(1)層次等級(jí)的創(chuàng)建與刪除;
(2)范疇的創(chuàng)建與刪除;
(3)客體的標(biāo)識(shí)、修改、刪除;
(4)代理的標(biāo)識(shí)、修改,刪除;
(5)主體的標(biāo)識(shí)、修改、刪除;
(6)特權(quán)的授予與回收;
(7)MAC的啟動(dòng)與關(guān)閉;
(8)安全信息瀏覽;
(9)設(shè)置安全管理員口令;
(10)審計(jì)的啟動(dòng)與關(guān)閉;
(11)安全審計(jì)選項(xiàng)的設(shè)置與撤消;
(12)審計(jì)報(bào)警的打開與關(guān)閉;
(13)審計(jì)信息的瀏覽與刪除;
(14)設(shè)置審計(jì)員口令。
5ODBC的設(shè)計(jì)與實(shí)現(xiàn)
基于RDBMS的安全增強(qiáng)系統(tǒng)中的ODBC的實(shí)現(xiàn)采用目前比較常用的Cllent/Server體系結(jié)構(gòu),主要包括客戶端和服務(wù)器端的實(shí)現(xiàn)。從ODBC要實(shí)現(xiàn)的函數(shù)的內(nèi)容來看。不僅包括常見的數(shù)據(jù)定義和數(shù)據(jù)操縱命令,還包括安全操作命令和數(shù)據(jù)字典
訪問命令,在數(shù)據(jù)庫服務(wù)器端需要調(diào)用不同的數(shù)據(jù)庫訪問函數(shù)。
5.1客戶端的設(shè)計(jì)與實(shí)現(xiàn)
客戶端主要是根據(jù)ODBC V3.0的規(guī)范來提供一個(gè)標(biāo)準(zhǔn)統(tǒng)一的用戶接口,使得具體的實(shí)現(xiàn)對(duì)用戶來說是透明的。在客戶端主要包括3個(gè)句柄:
(1)環(huán)境句柄HENV:為全程信息標(biāo)識(shí)內(nèi)存存儲(chǔ)。包括有效鏈接句柄和當(dāng)前活動(dòng)連接句柄并維護(hù)有關(guān)環(huán)境的錯(cuò)誤集:
(2)鏈接句柄HDBC:為特定鏈接的信息標(biāo)識(shí)內(nèi)存存儲(chǔ),每個(gè)鏈接句柄與環(huán)境句柄有關(guān)。存放本次鏈接的必要信息,包括網(wǎng)絡(luò)連接的信息和維護(hù)有關(guān)連接的錯(cuò)誤集:
(3)語句句柄HSTMT:為SQL語句信息標(biāo)識(shí)內(nèi)存存儲(chǔ)。用于存放每次操作的相美信息,以及返回的結(jié)果集和有關(guān)語句的錯(cuò)誤集。一個(gè)語句句柄必須與一個(gè)連接句柄相連,但一個(gè)連接句柄上可以有多個(gè)語句句柄??蛻舳司褪峭ㄟ^這3個(gè)訇柄來維護(hù)用戶的訪問信息的。
5.2服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)
在網(wǎng)絡(luò)環(huán)境下,用戶對(duì)數(shù)據(jù)庫的訪問量可能高于在單機(jī)環(huán)境下訪問的幾個(gè)數(shù)量級(jí)。而且在同一時(shí)刻會(huì)有多個(gè)用戶對(duì)數(shù)據(jù)庫進(jìn)行訪問,這就要求服務(wù)器端能夠并發(fā)地處理用戶的訪問請(qǐng)求。在接口的具體實(shí)現(xiàn)中,我們借助于操作系統(tǒng)的多任務(wù)多線程的特性,以實(shí)現(xiàn)多用戶的數(shù)據(jù)庫并發(fā)訪問操作。在數(shù)據(jù)庫服務(wù)器啟動(dòng)后將首先產(chǎn)生一個(gè)主線程,通過它再創(chuàng)建其他的服務(wù)線程。服務(wù)器端在接收到一次連接請(qǐng)求后都派生出一個(gè)線程來處理這次連接中的所有操作。而數(shù)據(jù)庫內(nèi)部的并發(fā)控制由后臺(tái)的RDBMS來負(fù)責(zé)維護(hù)。線程產(chǎn)生后,就開始監(jiān)聽網(wǎng)絡(luò),當(dāng)它從網(wǎng)絡(luò)上接收到請(qǐng)求時(shí),首先進(jìn)入語法分析模塊,對(duì)于MAC管理語句和審計(jì)管理語句,將分別進(jìn)入MAC管理模塊和審計(jì)管理模塊;對(duì)于SQL請(qǐng)求,則進(jìn)入安全模塊進(jìn)行安全檢查,如果安全檢查不能通過,則進(jìn)行相應(yīng)的處理并返回錯(cuò)誤,否則將調(diào)用RDBMS的API函數(shù)進(jìn)行處理,并將執(zhí)行的結(jié)果發(fā)回客戶端。在同一時(shí)間內(nèi)。服務(wù)器端可以派生出多個(gè)線程進(jìn)行并發(fā)操作。
6ODBC在安全增強(qiáng)系統(tǒng)中的應(yīng)用
利用上述ODBC研究成果。我們實(shí)現(xiàn)了一個(gè)基于Oracle數(shù)據(jù)庫系統(tǒng)的安全增強(qiáng)系統(tǒng),并利用該安全增強(qiáng)系統(tǒng)對(duì)我們自主實(shí)現(xiàn)的ODBC訪問接口進(jìn)行了功能測(cè)試和性能測(cè)試。
整個(gè)測(cè)試采用1999年江蘇省的網(wǎng)上招生系統(tǒng),該系統(tǒng)共定義了基表38個(gè)、視圖30個(gè)、存儲(chǔ)過程10個(gè),測(cè)試數(shù)據(jù)量總共在40萬條記錄左右。在對(duì)ODBC的功能測(cè)試中一共選取了85個(gè)例子,分為兩個(gè)部分:一是按照QDBC的標(biāo)準(zhǔn)對(duì)ODBC函數(shù)進(jìn)行測(cè)試(70個(gè)例子);二是進(jìn)行應(yīng)用綜合測(cè)試(15個(gè)例子)。測(cè)試用例共使用了61個(gè)ODBC函數(shù),對(duì)所有ODBC v3.0調(diào)用函數(shù)都進(jìn)行了測(cè)試,測(cè)試結(jié)果表明系統(tǒng)功能完全符合ODBCV3.0的要求。
我們利用Oracle數(shù)據(jù)庫及其專用的ODBC訪問接口進(jìn)行了性能對(duì)比測(cè)試。首先利用Oracle數(shù)據(jù)庫的專用ODBC訪問接口直接訪問Qracle數(shù)據(jù)庫,然后再使用我們實(shí)現(xiàn)的ODBC接口通過安全增強(qiáng)系統(tǒng)訪問O-racle數(shù)據(jù)庫,記錄在每次運(yùn)行過程中,從應(yīng)用程序發(fā)出一條SQL訪問命令開始,一直到獲取該次訪問的執(zhí)行結(jié)果所需的執(zhí)行時(shí)間。在測(cè)試過程中共選取了15個(gè)應(yīng)用例子,每個(gè)例子執(zhí)行3次。經(jīng)過測(cè)試使用安全增強(qiáng)器時(shí)整個(gè)系統(tǒng)的效率僅下降5%左右。
7小結(jié)
本文通過擴(kuò)展ODBC所采用的標(biāo)準(zhǔn)SQL語法成分的方法,使得該ODBC實(shí)現(xiàn)系統(tǒng)可以支持對(duì)數(shù)據(jù)安全子語言命令的處理,從而使得由ODBC、安全模塊、RDBMS接口模塊和后臺(tái)RDBMS可以構(gòu)成一個(gè)安全的數(shù)據(jù)庫系統(tǒng)。但是ODBC僅是關(guān)系數(shù)據(jù)庫系統(tǒng)在客戶/服務(wù)器方式下的一個(gè)網(wǎng)絡(luò)訪問接口,無法實(shí)現(xiàn)在Internet環(huán)境中應(yīng)用程序?qū)?shù)據(jù)庫服務(wù)器的直接訪問操作,因此盡快實(shí)現(xiàn)一個(gè)具有自主知識(shí)產(chǎn)權(quán)的JDBC數(shù)據(jù)庫訪問接口,并實(shí)現(xiàn)對(duì)上述數(shù)據(jù)安全子語言的支持,以構(gòu)建一個(gè)Internet環(huán)境中的安全數(shù)據(jù)庫系統(tǒng)將是我們今后進(jìn)一步的研究工作。