鈕小勇,韓桂明
1.江蘇省楚州職業(yè)教育中心校,江蘇淮安 223200
2.江蘇鹽城市信息工程技術(shù)學(xué)校,江蘇鹽城 223200
訪(fǎng)問(wèn)控制機(jī)制在數(shù)據(jù)庫(kù)中的應(yīng)用研究
鈕小勇1,韓桂明2
1.江蘇省楚州職業(yè)教育中心校,江蘇淮安 223200
2.江蘇鹽城市信息工程技術(shù)學(xué)校,江蘇鹽城 223200
本文在明確信息安全重要性的基礎(chǔ)上,闡述了訪(fǎng)問(wèn)控制機(jī)制的概念,分析了訪(fǎng)問(wèn)控制機(jī)制在數(shù)據(jù)庫(kù)中的工作原理,并詳細(xì)研究了訪(fǎng)問(wèn)控制機(jī)制在數(shù)據(jù)庫(kù)中的應(yīng)用。
數(shù)據(jù)庫(kù);訪(fǎng)問(wèn)控制機(jī)制;數(shù)據(jù)安全
隨著信息技術(shù)及網(wǎng)絡(luò)技術(shù)的發(fā)展,數(shù)據(jù)庫(kù)的應(yīng)用越來(lái)越廣。如何保證數(shù)據(jù)庫(kù)的安全已經(jīng)成為迫切需要解決的問(wèn)題。通過(guò)有效的訪(fǎng)問(wèn)控制機(jī)制保證數(shù)據(jù)庫(kù)的安全性是一個(gè)非常有效的手段,本文重點(diǎn)研究訪(fǎng)問(wèn)控制機(jī)制在數(shù)據(jù)庫(kù)中的應(yīng)用。
訪(fǎng)問(wèn)控制機(jī)制是數(shù)據(jù)庫(kù)系統(tǒng)安全性得到有效保障的重要機(jī)制,其本質(zhì)就是按照系統(tǒng)權(quán)限,進(jìn)行有效驗(yàn)證,實(shí)現(xiàn)授權(quán)用戶(hù)才能進(jìn)行相關(guān)的操作,而非授權(quán)用戶(hù)視為非法用戶(hù),被禁止一切系統(tǒng)操作。訪(fǎng)問(wèn)控制機(jī)制的任務(wù)主要包括:鑒定對(duì)數(shù)據(jù)庫(kù)提出操作請(qǐng)求的用戶(hù)身份的合法性;明確用戶(hù)的操作權(quán)限及規(guī)則;授權(quán)合法用戶(hù)對(duì)應(yīng)的訪(fǎng)問(wèn)機(jī)制等。
可見(jiàn),通過(guò)訪(fǎng)問(wèn)控制機(jī)制能有效保證數(shù)據(jù)的完整性及保密性。
訪(fǎng)問(wèn)控制機(jī)制的實(shí)現(xiàn)主要是通過(guò)解析器模塊加以實(shí)現(xiàn)的。解析器主要負(fù)責(zé)分析用戶(hù)提出的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)請(qǐng)求語(yǔ)句,根據(jù)該SQL數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)語(yǔ)句,提取出其中涉及到的數(shù)據(jù)表名、字段名以及查詢(xún)過(guò)濾條件等,然后生成一棵分析樹(shù)。最后,根據(jù)生成分析樹(shù),判定該用戶(hù)是否有對(duì)該數(shù)據(jù)庫(kù)相關(guān)數(shù)據(jù)操作的權(quán)限。
解決器模塊的工作流程如下描述:首先進(jìn)行參數(shù)初始化,并針對(duì)用戶(hù)訪(fǎng)問(wèn)請(qǐng)求分配對(duì)應(yīng)的子線(xiàn)程;其次在cache中搜索該訪(fǎng)問(wèn)請(qǐng)求是否存在;接著根據(jù)訪(fǎng)問(wèn)機(jī)制對(duì)請(qǐng)求語(yǔ)句進(jìn)行分析;最后根據(jù)分析樹(shù)去執(zhí)行請(qǐng)求并返回結(jié)果。其中,最關(guān)鍵點(diǎn)在于對(duì)請(qǐng)求語(yǔ)句進(jìn)行分析,這主要借助于parse(thd)函數(shù)加以完成,也就是對(duì)SQL語(yǔ)句進(jìn)行詞法及語(yǔ)法的分析。
此外,訪(fǎng)問(wèn)控制機(jī)制也定義了檢查接口的相關(guān)語(yǔ)句,比如:
bool mac_check_table_SELECT ( ) ;
bool mac_check_table_INSERT ( ) ;
bool mac_check_table_UPDATE ( ) ;
通過(guò)該3條語(yǔ)句,就能夠?qū)?shù)據(jù)庫(kù)常用的3個(gè)SQL操作語(yǔ)句(select,insert,update)進(jìn)行訪(fǎng)問(wèn)控制的檢測(cè)。因?yàn)?個(gè)函數(shù)都是返回bool型的數(shù)據(jù),所以根據(jù)返回結(jié)果,如果是true,則表示末授權(quán);反之,則表示授權(quán)。
圖1 訪(fǎng)問(wèn)控制模塊的組成示意圖
訪(fǎng)問(wèn)控制模塊主要由3個(gè)子模塊構(gòu)成,涉及到:主客體信息的管理、主客體信息的維護(hù)以及客體的安全級(jí)別,他們之間的關(guān)系如圖1所示。
針對(duì)一條SQL語(yǔ)句,通過(guò)訪(fǎng)問(wèn)控制模塊進(jìn)行檢測(cè)時(shí),首先是獲取SQL語(yǔ)句主體的安全級(jí)別;其次是獲取SQL語(yǔ)句客體的安全級(jí)別;最后是比較兩者的安全級(jí)別。若符合訪(fǎng)問(wèn)控制模塊規(guī)定的安全規(guī)則,則可以繼續(xù)執(zhí)行;反之,則結(jié)束操作,并返回相關(guān)信息。
當(dāng)運(yùn)行訪(fǎng)問(wèn)控制機(jī)制時(shí),首先要啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器,并將訪(fǎng)問(wèn)控制信息導(dǎo)入相關(guān)程序,這可以通過(guò)在主函數(shù)Win_main()中加入sec_init()函數(shù)實(shí)現(xiàn),該函數(shù)又調(diào)用sec_reload()實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的導(dǎo)入,并將相關(guān)表存儲(chǔ)至相應(yīng)結(jié)構(gòu)中,而哈希表中則保存了結(jié)構(gòu)所對(duì)應(yīng)的存儲(chǔ)地址。關(guān)鍵代碼如下描述:
哈希表的創(chuàng)建
獲取數(shù)據(jù)表前的一些初始化;
// 哈希表sec_subjec的初始化
(void ) hash_init ( & sec_subject,system_charset_info, 0, 0, 0, (hash_get_key ) get_subject_table, 0, 0 ) ;
// 通過(guò)while語(yǔ)句從數(shù)據(jù)表中循環(huán)取出相關(guān)記錄
While ( ! ( read_record_info.read_record ( & read_record_info ) ) ) {
Subject_Type* user = ( Subject_Type * ) alloc_root ( & mem,sizeof (Subject_Type ) ) ;
// 將相關(guān)記錄信息存儲(chǔ)至Subject_Type結(jié)構(gòu)中
User -> user = get_field (&mem,table -> field[0] ) ;
// 將SQL語(yǔ)句主體結(jié)構(gòu)的地址保存在Hash表
If ( my_hash_insert ( & sec_subject, ( uchar* )user ) )
{ goto end_unlock ; // hash表插入失敗,并返回相關(guān)信息 }
end_read_record ( & read_record_info ) ; // 數(shù)據(jù)庫(kù)表讀取后,進(jìn)行一些后期清理
至此,數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)完畢,完成相關(guān)訪(fǎng)問(wèn)控制信息的初始化。此外,需要借助函數(shù)sec_reload ( )來(lái)對(duì)hash表進(jìn)行重載,也允許數(shù)據(jù)庫(kù)管理員修改訪(fǎng)問(wèn)控制相關(guān)的表,這樣才能保證訪(fǎng)問(wèn)控制機(jī)制的一致性。
針對(duì)數(shù)據(jù)庫(kù)系統(tǒng)第三級(jí)安全的核心內(nèi)容,訪(fǎng)問(wèn)控制機(jī)制的應(yīng)用起到非常重要的作用。然而,大部分的數(shù)據(jù)庫(kù)系統(tǒng)沒(méi)有實(shí)現(xiàn)很好的靈活訪(fǎng)問(wèn)控制機(jī)制。但隨著數(shù)據(jù)庫(kù)技術(shù)以及信息技術(shù)的研究深入,訪(fǎng)問(wèn)控制機(jī)制將越來(lái)越受到人們的重視,并會(huì)不斷得到有效的推廣應(yīng)用,這也將為數(shù)據(jù)庫(kù)系統(tǒng)的安全性保障提供巨大作用。
[1]胡啟韜,吳碧偉,姚培.強(qiáng)制訪(fǎng)問(wèn)控制在提高M(jìn)ySQL安全性上的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2009,9:160-166.
[2]吳飛林,王曉燕,朗波.基于MySQL的可定制強(qiáng)制訪(fǎng)問(wèn)控制的研究與實(shí)現(xiàn)[J].2007,24(11):117-120.
TP392
A
1674-6708(2010)30-0188-01