加密后臺(tái)數(shù)據(jù)庫(kù)方法

字號(hào):

地球人都知道,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