地球人都知道,MDB文件很不安全,*MDB文件密碼的軟件層出不窮,那是否如果我們MDB作后臺(tái)數(shù)據(jù)庫(kù),是不是就等于任人宰割了呢?我覺得未必是這樣的。
我用過不少Access密碼*器,大多數(shù)都只能處理英文密碼,因此我們可以針對(duì)這一特點(diǎn),把MDB文件的數(shù)據(jù)庫(kù)密碼設(shè)置為中文的,這樣就可以抵擋大部份*器的攻擊了。
一定有人會(huì)說,既然人家能寫出*英文密碼的軟件,一定也可以寫出*中文密碼的軟件。這句話一點(diǎn)都沒錯(cuò),不過我們還有第二招:更改文件頭。
MDB的頭16個(gè)字節(jié)保存著文件類型、版本等諸如此類的重要信息,Access靠這些信息來識(shí)別它們,如果我們改動(dòng)一個(gè)或多個(gè)字節(jié),Access就會(huì)因無法識(shí)別這些文件而打不開它們,也就達(dá)到了我們的目的:加密MDB文件。加密思路如下:
打開文件時(shí),把正確的頭文件內(nèi)容寫入相應(yīng)的位置,我們自已的程序就可以訪問它,關(guān)閉文件時(shí)把更改過的錯(cuò)誤的頭文件內(nèi)容寫入相應(yīng)的位置。這樣做有個(gè)弊端,就是程序運(yùn)行時(shí),后臺(tái)文件是可以訪問的,只有關(guān)閉后才加密,那么當(dāng)程序運(yùn)行時(shí),別人如果知道了數(shù)據(jù)庫(kù)密碼,還是可以查看或?qū)С鰯?shù)據(jù)的。
另一種做法是打開后臺(tái)數(shù)據(jù)庫(kù)后,馬上建立一個(gè)持續(xù)到程序結(jié)束的物理連接,然后再把錯(cuò)誤的文件頭內(nèi)容寫入相應(yīng)的位置,這樣在程序運(yùn)行當(dāng)中,我們的前臺(tái)程序是可以正常訪問后臺(tái)數(shù)據(jù)的,而不知道我們的加密方法的人是無法打開后臺(tái)文件的。
@#使后臺(tái)可以正常訪問
Function OpenHt(HTmdbPath As String)
Dim fh As Integer
fh = FreeFile
Open HTmdbPath For Binary Access Write As #fh
Put fh, 2, &H1
Close #fh
End Function
@#使后臺(tái)無法正常訪問
Function CloseHt(HTmdbPath As String)
Dim fh As Integer
fh = FreeFile
Open HTmdbPath For Binary Access Write As #fh
Put fh, 2, &H0
Close #fh
End Function
@#下面的都是跟后臺(tái)建立物理連接的函數(shù)(必須放在模塊里)
Public HTcn As Connection
Public HTrs As New ADODB.Recordset
Public HTsql As String
@#建立物理連接
Function OpenStandHT()
Set HTcn = CurrentProject.Connection
@#表1要改成相應(yīng)的表名
HTsql = "select * from 表1"
HTrs.Open HTsql, HTcn, 3, 3, 1
End Function
@#關(guān)閉物理連接的函數(shù),如退出程序時(shí),或需要壓縮后臺(tái)文件時(shí)就要關(guān)閉物理連接
Function CloseStandHT()
HTrs.Close
Set HTcn = Nothing
End Function
我用過不少Access密碼*器,大多數(shù)都只能處理英文密碼,因此我們可以針對(duì)這一特點(diǎn),把MDB文件的數(shù)據(jù)庫(kù)密碼設(shè)置為中文的,這樣就可以抵擋大部份*器的攻擊了。
一定有人會(huì)說,既然人家能寫出*英文密碼的軟件,一定也可以寫出*中文密碼的軟件。這句話一點(diǎn)都沒錯(cuò),不過我們還有第二招:更改文件頭。
MDB的頭16個(gè)字節(jié)保存著文件類型、版本等諸如此類的重要信息,Access靠這些信息來識(shí)別它們,如果我們改動(dòng)一個(gè)或多個(gè)字節(jié),Access就會(huì)因無法識(shí)別這些文件而打不開它們,也就達(dá)到了我們的目的:加密MDB文件。加密思路如下:
打開文件時(shí),把正確的頭文件內(nèi)容寫入相應(yīng)的位置,我們自已的程序就可以訪問它,關(guān)閉文件時(shí)把更改過的錯(cuò)誤的頭文件內(nèi)容寫入相應(yīng)的位置。這樣做有個(gè)弊端,就是程序運(yùn)行時(shí),后臺(tái)文件是可以訪問的,只有關(guān)閉后才加密,那么當(dāng)程序運(yùn)行時(shí),別人如果知道了數(shù)據(jù)庫(kù)密碼,還是可以查看或?qū)С鰯?shù)據(jù)的。
另一種做法是打開后臺(tái)數(shù)據(jù)庫(kù)后,馬上建立一個(gè)持續(xù)到程序結(jié)束的物理連接,然后再把錯(cuò)誤的文件頭內(nèi)容寫入相應(yīng)的位置,這樣在程序運(yùn)行當(dāng)中,我們的前臺(tái)程序是可以正常訪問后臺(tái)數(shù)據(jù)的,而不知道我們的加密方法的人是無法打開后臺(tái)文件的。
@#使后臺(tái)可以正常訪問
Function OpenHt(HTmdbPath As String)
Dim fh As Integer
fh = FreeFile
Open HTmdbPath For Binary Access Write As #fh
Put fh, 2, &H1
Close #fh
End Function
@#使后臺(tái)無法正常訪問
Function CloseHt(HTmdbPath As String)
Dim fh As Integer
fh = FreeFile
Open HTmdbPath For Binary Access Write As #fh
Put fh, 2, &H0
Close #fh
End Function
@#下面的都是跟后臺(tái)建立物理連接的函數(shù)(必須放在模塊里)
Public HTcn As Connection
Public HTrs As New ADODB.Recordset
Public HTsql As String
@#建立物理連接
Function OpenStandHT()
Set HTcn = CurrentProject.Connection
@#表1要改成相應(yīng)的表名
HTsql = "select * from 表1"
HTrs.Open HTsql, HTcn, 3, 3, 1
End Function
@#關(guān)閉物理連接的函數(shù),如退出程序時(shí),或需要壓縮后臺(tái)文件時(shí)就要關(guān)閉物理連接
Function CloseStandHT()
HTrs.Close
Set HTcn = Nothing
End Function

