地球人都知道,MDB文件很不安全,破解MDB文件密碼的軟件層出不窮,那是否如果我們MDB作後台數據庫,是不是就等於任人宰割了呢?我覺得未必是這樣的。
我用過不少Access密碼破解器,大多數都只能處理英文密碼,因此我們可以針對這一特點,把MDB文件的數據庫密碼設置為中文的,這樣就可以抵擋大部份破解器的攻擊了。
一定有人會說,既然人家能寫出破解英文密碼的軟件,一定也可以寫出破解中文密碼的軟件。這句話一點都沒錯,不過我們還有第二招:更改文件頭。
MDB的頭16個字節保存著文件類型、版本等諸如此類的重要信息,Access靠這些信息來識別它們,如果我們改動一個或多個字節,Access就會因無法識別這些文件而打不開它們,也就達到了我們的目的:加密MDB文件。加密思路如下:
打開文件時,把正確的頭文件內容寫入相應的位置,我們自已的程序就可以訪問它,關閉文件時把更改過的錯誤的頭文件內容寫入相應的位置。這樣做有個弊端,就是程序運行時,後台文件是可以訪問的,只有關閉後才加密,那麼當程序運行時,別人如果知道了數據庫密碼,還是可以查看或導出數據的。
另一種做法是打開後台數據庫後,馬上建立一個持續到程序結束的物理連接,然後再把錯誤的文件頭內容寫入相應的位置,這樣在程序運行當中,我們的前台程序是可以正常訪問後台數據的,而不知道我們的加密方法的人是無法打開後台文件的。
'使後台可以正常訪問
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
'使後台無法正常訪問
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
'下面的都是跟後台建立物理連接的函數(必須放在模塊裡)
Public HTcn As Connection
Public HTrs As New ADODB.Recordset
Public HTsql As String
'建立物理連接
Function OpenStandHT()
Set HTcn = CurrentProject.Connection
'表1要改成相應的表名
HTsql = "select * from 表1"
HTrs.Open HTsql, HTcn, 3, 3, 1
End Function
'關閉物理連接的函數,如退出程序時,或需要壓縮後台文件時就要關閉物理連接
Function CloseStandHT()
HTrs.Close
Set HTcn = Nothing
End Function