MDB文件很不安全,*MDB文件密碼的軟件層出不窮,那是否如果我們MDB作后臺(tái)數(shù)據(jù)庫(kù),是不是就等于任人宰割了呢?我覺(jué)得未必是這樣的。
我用過(guò)不少Access密碼*器,大多數(shù)都只能處理英文密碼,因此我們可以針對(duì)這一特點(diǎn),把MDB文件的數(shù)據(jù)庫(kù)密碼設(shè)置為中文的,這樣就可以抵擋大部份*器的攻擊了。
一定有人會(huì)說(shuō),既然人家能寫(xiě)出*英文密碼的軟件,一定也可以寫(xiě)出*中文密碼的軟件。這句話(huà)一點(diǎn)都沒(méi)錯(cuò),不過(guò)我們還有第二招:更改文件頭。
MDB的頭16個(gè)字節(jié)保存著文件類(lèi)型、版本等諸如此類(lèi)的重要信息,Access靠這些信息來(lái)識(shí)別它們,如果我們改動(dòng)一個(gè)或多個(gè)字節(jié),Access就會(huì)因無(wú)法識(shí)別這些文件而打不開(kāi)它們,也就達(dá)到了我們的目的:加密MDB文件。加密思路如下:
打開(kāi)文件時(shí),把正確的頭文件內(nèi)容寫(xiě)入相應(yīng)的位置,我們自已的程序就可以訪(fǎng)問(wèn)它,關(guān)閉文件時(shí)把更改過(guò)的錯(cuò)誤的頭文件內(nèi)容寫(xiě)入相應(yīng)的位置。這樣做有個(gè)弊端,就是程序運(yùn)行時(shí),后臺(tái)文件是可以訪(fǎng)問(wèn)的,只有關(guān)閉后才加密,那么當(dāng)程序運(yùn)行時(shí),別人如果知道了數(shù)據(jù)庫(kù)密碼,還是可以查看或?qū)С鰯?shù)據(jù)的。
另一種做法是打開(kāi)后臺(tái)數(shù)據(jù)庫(kù)后,馬上建立一個(gè)持續(xù)到程序結(jié)束的物理連接,然后再把錯(cuò)誤的文件頭內(nèi)容寫(xiě)入相應(yīng)的位置,這樣在程序運(yùn)行當(dāng)中,我們的前臺(tái)程序是可以正常訪(fǎng)問(wèn)后臺(tái)數(shù)據(jù)的,而不知道我們的加密方法的人是無(wú)法打開(kāi)后臺(tái)文件的。
'使后臺(tái)可以正常訪(fǎng)問(wèn)
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)無(wú)法正常訪(fǎng)問(wèn)
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
我用過(guò)不少Access密碼*器,大多數(shù)都只能處理英文密碼,因此我們可以針對(duì)這一特點(diǎn),把MDB文件的數(shù)據(jù)庫(kù)密碼設(shè)置為中文的,這樣就可以抵擋大部份*器的攻擊了。
一定有人會(huì)說(shuō),既然人家能寫(xiě)出*英文密碼的軟件,一定也可以寫(xiě)出*中文密碼的軟件。這句話(huà)一點(diǎn)都沒(méi)錯(cuò),不過(guò)我們還有第二招:更改文件頭。
MDB的頭16個(gè)字節(jié)保存著文件類(lèi)型、版本等諸如此類(lèi)的重要信息,Access靠這些信息來(lái)識(shí)別它們,如果我們改動(dòng)一個(gè)或多個(gè)字節(jié),Access就會(huì)因無(wú)法識(shí)別這些文件而打不開(kāi)它們,也就達(dá)到了我們的目的:加密MDB文件。加密思路如下:
打開(kāi)文件時(shí),把正確的頭文件內(nèi)容寫(xiě)入相應(yīng)的位置,我們自已的程序就可以訪(fǎng)問(wèn)它,關(guān)閉文件時(shí)把更改過(guò)的錯(cuò)誤的頭文件內(nèi)容寫(xiě)入相應(yīng)的位置。這樣做有個(gè)弊端,就是程序運(yùn)行時(shí),后臺(tái)文件是可以訪(fǎng)問(wèn)的,只有關(guān)閉后才加密,那么當(dāng)程序運(yùn)行時(shí),別人如果知道了數(shù)據(jù)庫(kù)密碼,還是可以查看或?qū)С鰯?shù)據(jù)的。
另一種做法是打開(kāi)后臺(tái)數(shù)據(jù)庫(kù)后,馬上建立一個(gè)持續(xù)到程序結(jié)束的物理連接,然后再把錯(cuò)誤的文件頭內(nèi)容寫(xiě)入相應(yīng)的位置,這樣在程序運(yùn)行當(dāng)中,我們的前臺(tái)程序是可以正常訪(fǎng)問(wèn)后臺(tái)數(shù)據(jù)的,而不知道我們的加密方法的人是無(wú)法打開(kāi)后臺(tái)文件的。
'使后臺(tái)可以正常訪(fǎng)問(wèn)
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)無(wú)法正常訪(fǎng)問(wèn)
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