傅文明
遼寧廣播電視大學(xué)(沈陽110034 )
Access數(shù)據(jù)庫(kù)是一個(gè)桌面關(guān)系型數(shù)據(jù)庫(kù),對(duì)于一些信息量較少的系統(tǒng),選用Access數(shù)據(jù)庫(kù)使得編程、使用、二嵌開發(fā)都比較容易。對(duì)于桌面型的數(shù)據(jù)庫(kù)應(yīng)用來說,Access數(shù)據(jù)庫(kù)的安全機(jī)制已經(jīng)可以滿足要求,但從根本上來說,Access數(shù)據(jù)庫(kù)的安全性設(shè)計(jì)是不完善的,需要詳細(xì)分析數(shù)據(jù)庫(kù)的安全漏洞,提出防范對(duì)策。
由于Access數(shù)據(jù)庫(kù)的加密機(jī)制非常簡(jiǎn)單,所以即使數(shù)據(jù)庫(kù)設(shè)置了密碼,解密也很容易。該數(shù)據(jù)庫(kù)系統(tǒng)通過將用戶輸入的密碼與某一固定密鑰進(jìn)行異或來形成一個(gè)加密串,并將其存儲(chǔ)在*.mdb文件中從地址“&H42”開始的區(qū)域內(nèi)。由于異或操作的特點(diǎn)是經(jīng)過兩次異或就恢復(fù)原值,因此,用這一密鑰與*.mdb文件中的加密串進(jìn)行第二次異或操作,便可輕松得到Access數(shù)據(jù)庫(kù)的密碼?;谶@種原理,可以很容易地編制出解密程序。
Admin用戶是Access系統(tǒng)的缺省用戶,除非系統(tǒng)在安裝后已經(jīng)重新鏈接到了某個(gè)新的工作組安全系統(tǒng)上,否則將以默認(rèn)的Admin用戶登錄Access。而微軟將標(biāo)記Admin帳戶的用戶ID號(hào)設(shè)成了一個(gè)固定值,這就意味著全世界的Access系統(tǒng)的Admin用戶在Access中都是同一個(gè)用戶。
Access有一個(gè)默認(rèn)名為system.mdw的工作組信息文件,該文件存放了Access數(shù)據(jù)庫(kù)的全部安全信息,包括用戶賬號(hào)和組賬號(hào)。需注意的是,該System.mdw工作組信息文件是不安全的。因?yàn)樵诎惭bAccess的同時(shí),安裝程序自動(dòng)將默認(rèn)的工作組定義在其創(chuàng)建的工作組信息文件中。在用戶還沒有使用“工具組管理器”指定其他的工作組信息文件之前,再次啟動(dòng)Access時(shí),都使用默認(rèn)的工作組信息文件。默認(rèn)狀態(tài)下原System.mdw工作組信息文件之所以不安全是因?yàn)樗墓ぷ鹘MID是空白的,任何人都可以獲得該工作組信息文件定義的管理員賬號(hào),具有訪問數(shù)據(jù)庫(kù)的各種權(quán)限,安全隱患極大。
這里介紹一種在VB中設(shè)置Access密碼的解決方案,用關(guān)鍵字ALTER DATABASE設(shè)置、修改數(shù)據(jù)庫(kù)密碼。使用該方法前,先設(shè)置對(duì)Microsoft ADO Ext 2.5 for DDL and Security庫(kù)的引用,具體語法如下。
ALTER DATABASE PASSW0RD NewPassw ord OldPassword
第一次設(shè)置數(shù)據(jù)庫(kù)密碼時(shí),使用 NULL關(guān)鍵字作為 AL-TER DATABASE語句中的OldPassword參數(shù),其代碼如下。
Dim ObjConn As ADODB.Connection
Dim strSetPassword As String′創(chuàng)建SQL串以初始化一個(gè)數(shù)據(jù)庫(kù)密碼
trSetPassword =″ALTER DATABASE PASS WORD NewPassword NULL;″
Set objConn=New ADODB.Connection′設(shè)置數(shù)據(jù)庫(kù)的打開方式為獨(dú)占
ObjConn.Mode=adModeShareExclusive′打開數(shù)據(jù)庫(kù),path為數(shù)據(jù)庫(kù)的路徑
ObjConn.Open="Provider=Microsoft.Jet.OL EDB.4.0;DataSource=Path;″′執(zhí)行 SQL 語句設(shè)置數(shù)據(jù)庫(kù)密碼
ObjConn.Execute(strSetPassword)
修改數(shù)據(jù)庫(kù)密碼時(shí),首先要用舊密碼登錄數(shù)據(jù)庫(kù),然后再更改密碼。其代碼如下:
ObjConn.Mode=adModeShareExclusive
ObjConn.Provider=″Microsoft.Jet.OLEDB.4.0″
ObjConn.Properties(″Jet OLEDB:Database P assword″)=″OldPassword″
ObjConn.Open″DalaSource=Path″′修改密碼
strAltertPasswod =″ALTER DATABASE PA SSW0RD NewPassword OldPassword;″
objConn.Execute(strAlterPassword)
刪除數(shù)據(jù)庫(kù)密碼操作類似于修改密碼過程,只需使用NULL關(guān)鍵字作為ALTER DATABASE語句的NewPassword參數(shù)即可。
解決的基本思路是屏蔽 Admin用戶對(duì)數(shù)據(jù)庫(kù)的所有權(quán)限。首先,在Admin用戶組中增加一個(gè)新的與 Admin用戶等同的新用戶(如www),然后以新用戶登錄 Access,從 Admin用戶組將Admin用戶撤出,并屏蔽掉Admin用戶對(duì)數(shù)據(jù)庫(kù)的所有權(quán)限,這樣,Admin用戶就成為了一個(gè)普通用戶,實(shí)際的數(shù)據(jù)庫(kù)系統(tǒng)管理員則變?yōu)樾掠脩?www,而你的數(shù)據(jù)庫(kù)安全系統(tǒng)就對(duì)所有的用戶起到了防護(hù)作用。
可使用工作組管理員程序?qū)ぷ鹘M信息文件進(jìn)行管理。數(shù)據(jù)庫(kù)管理員有權(quán)增加、刪除組和用戶,最好把開發(fā)同一項(xiàng)目的成員設(shè)在一個(gè)組。Access將用戶歸類到各種組中,所以數(shù)據(jù)庫(kù)安全管理可極大簡(jiǎn)化,也就是為組而不是為單個(gè)用戶指定權(quán)限,然后通過將用戶添加到組中或從組中刪除的方式來更改單個(gè)用戶的權(quán)限。對(duì)于處于同組的用戶授予新權(quán)限,只要執(zhí)行一個(gè)操作,即可對(duì)該組賬號(hào)授予新的權(quán)限。為了數(shù)據(jù)庫(kù)的安全,要及時(shí)刪除不再使用數(shù)據(jù)庫(kù)的用戶和組。
本文分析了與實(shí)際使用密切相關(guān)的 Access數(shù)據(jù)庫(kù)系統(tǒng)安全漏洞,并提出了一定的防范對(duì)策,對(duì)于實(shí)踐使用有一定的針對(duì)性和指導(dǎo)意義,在具體實(shí)施時(shí),應(yīng)根據(jù)具體情況、環(huán)境和需求,因地制宜進(jìn)行分析,采取相應(yīng)有效措施保護(hù)數(shù)據(jù)庫(kù)系統(tǒng)乃至整個(gè)系統(tǒng)的安全。
[1]廖啟亮,曾健思等. Access數(shù)據(jù)庫(kù)加密系統(tǒng)安全性剖析及改進(jìn)策略.中國(guó)安全科學(xué)學(xué)報(bào),2008(5).
[2]郭麗. Access數(shù)據(jù)庫(kù)的安全與防范.北京:清華大學(xué)出版社,2006.
[3]薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論.北京:高等教育出版社,2003.
[4]曾濤,黃凈.Access數(shù)據(jù)庫(kù)的安全機(jī)制、隱患及改進(jìn)策略.大眾科技,2006(7)