一種簡便有效的數據庫安全法
發表于:2007-07-14來源:作者:點擊數:
標簽:
福建師范大學經濟研究所 倪秉書 ---- 在編寫 VB 應用程序時,經常要用到它強大的 數據庫 功能,VB數據庫與A CC ESS都為同一關系模型數據庫,兩者完全兼容,默認庫文件名為.MDB。一些用VB編寫的數據庫應用軟件要求具有很高的數據保密性,我們一般在啟動軟件時
福建師范大學經濟研究所 倪秉書
---- 在編寫
VB應用程序時,經常要用到它強大的
數據庫功能,VB數據庫與A
CCESS都為同一關系模型數據庫,兩者完全兼容,默認庫文件名為.MDB。一些用VB編寫的數據庫應用軟件要求具有很高的數據保密性,我們一般在啟動軟件時要求輸入相應的用戶名及口令來確保數據的
安全,但是軟件所附帶的大量.MDB數據庫文件,非法人員卻可以通過一些軟件比如ACCESS方便地打開并查閱其中的敏感數據,有可能造成嚴重的瀉密,如果是存放軟件的用戶名、權限、密碼等信息,則更是如此。一般的做法是,先把數據庫文件通過某種算法加密,然后在運行程序時解開,在程序退出時再把文件加密,這種作法不僅費時費力,而且一旦處理不當還有可以造成文件損壞,數據永久性丟失。而ACCESS中提供了一種數據庫安全機制,就是在打開數據庫前可以要求使用者輸入密碼,微軟提供的這種安全機制可以滿足大部份用戶的數據安全要求,是比較有效的,而在VB中的Opendatabase方法可以利用編程者在程序中預設的密碼打開被設密的庫文件,這樣用VB編寫的程序經過編譯之后,密碼就被隱含在程序中,軟件在要使用到庫文件時,利用隱含在程序中的密碼打開庫文件,存取數據,而無關人員則無法打開軟件隨帶的被預設了密碼的數據庫文件,使庫文件中的數據得到了良好保護。以下就以ACCESS97和VB5為例說明處理的過程:
---- 首先,在ACCESS中以“獨占”方式打開一個數據庫文件(在打開窗口中選擇“獨占”框),然后選擇“工具”菜單的“安全”項中的“設置數據庫密碼”,輸入密碼,確定,存盤退出。接著在VB程序中通過OpenDatabase方法來操作被加密的庫文件,因為該方法涉及到數據訪問對象(DAO),因此在使用前必須先引用,然后才能使用,方法是:在VB5中打開“工程”菜單,選“引用”項,在打開的“引用窗口”中選擇“Microsoft DAO 3.5 Object Library”,確定,退出。為了方便,本例僅舉一個簡單的例子,在具體的應用中可結合需要對被打開的庫文件進行各種其他的操作:新建一個工程,在窗體上放置一個命令控件,運行該程序后,按下命令按鈕,則自動打開一個已設密碼的數據庫文件,為了說明文件確實已正確的被打開,本例在“立即”窗口中把所打開的文件中的所有表的名稱都顯示出來(當然,數據庫本身專用的一些以MSYS等開頭的系統表的表名因為未經處理也被顯示),在編程之前,先介紹一下Opendatabase方法的語法:
Set dbdatabase=workspace.OpenDatabase
(dbname,options,read-only,connect)
---- 各部分說明如下:
---- dbdatabase:一個對象型變量,用來表示你所要打開的數據庫對象;
---- workspace:可選項,一個表示已存在的workspace型對象的對象型變量,如果不指明該變量,OpenDatabase將使用默認的workspace;
---- dbname:一個存在的VB可訪問的數據庫文件名,當然,也可以是一個開放數據庫連接(ODBC)的數據源名(DSN);
---- options:可選項,一般是一個用來設置數據庫的各種選項的一個變體型變量,如果設True表明以獨占方式打開,False(默認)表明以共享方式打開;
---- read-only:可選項,一個布爾值,True表明數據庫以只讀方式打開,False(默認),表明以讀/寫方式打開。
---- Connect:可選項(但在本例中是重點),一個字符串變體,用來指定各種數據庫連接信息,如數據庫文件類型和密碼信息。
---- 現在可以在命令控件的Click事件中加入橫線后的代碼了:
Option Explicit
Dim dbworkspace As Workspace
Dim dbdatabase As Database
Dim dbtable As TableDef
注釋:以上為各對象變量的定義說明部分
---------------------------------
Private Sub Command1_Click()
On Error GoTo
vberror
Set dbworkspace = DBEngine.Workspaces(0)
Set dbdatabase = dbworkspace.OpenDatabase
("c:\phone.mdb", True, True, ";pwd=lnlnlln")
---- 注:打開c:\下的一個名為phone.mdb的已設密碼的數據庫文件,最后一個用引號引起來的參數包括數據庫類型和數據庫密碼,兩者之間必須用分號分隔,本處因為使用的是.MDB標準庫,所以可不必寫類型,但“;“不可省,等號后為密碼(本處作者把Phone.mdb的密碼設為lnlnlln,注意密碼要嚴格區分大小寫)
For Each dbtable In dbdatabase.TableDefs
De
bug.Print dbtable.Name
注釋:在‘立即’窗口中顯示表名
Next
vberror:
MsgBox Err.Description
End Sub
---- 現在,數據庫已被加上了一把"鎖",除了擁有密碼的使用者或應用程序以外,沒人會打得開你的數據庫文件了,但細心的人也許會發現,現在雖然沒有密碼就不能用數據庫管理系統來打開數據文件,但如果有人用記事本或寫字板等一類字編輯軟件強行打開一個被加鎖的數據庫,雖然他不能看到完整的數據,但還可以隱約地窺視到一些斷斷續續的信息,這時我們可以再次地利用ACCESS的另一種防止用其他軟件查閱數據庫的加密功能:在ACCESS中打開PHONE.MDB數據庫,在"工具"菜單中找到"安全"選項中的"加密/解密數據庫".至此,你就可以不用為你的數據安全而整日操心了.
原文轉自:http://www.anti-gravitydesign.com