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