加密后臺數據庫方法

字號:

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