在Winform開發框架中實現對資料庫的加密支援

2021-09-06 10:30:22 字數 2840 閱讀 5711

由於不想引入太多這些額外的模組,或者為了簡化客戶端的配置考慮,直接在enterpriselibrary模組內部對資料庫連線字串,增加密碼部分,也是乙個有效的方法,本文通過介紹這種方式,實現對加密access資料庫連線字串的

處理,並能順利訪問帶密碼的access資料庫。

如果要加密的是access資料庫,必須選擇access2007以上版本,這個版本的密碼是經過128位的特殊處理,目前好像還是比較難破解,也好像沒有找到合適的破解工具,如果是access2000,那破解密碼的工具真是多了去的了。

如果要加密的是sqlite資料庫,那麼也是可以比較有效的,他的密碼也是比較難於破解的。

上面兩種客戶端資料庫,開啟後先通過軟體本身的功能進行加密,密碼我們在開發初期就設定即可,客戶一般不需要了解,他們或者其他人員複製出去,也無法單獨使用,確保了資料庫的安全性。

1)access的資料庫加密 

如果是對access的資料庫加密,記住選擇access2007以上的格式,然後以獨佔方式開啟access檔案,如下圖所示。

然後在資料庫工具選項裡面,選擇用密碼進行加密,在彈出的對話方塊輸入你的密碼即可。

office2007的密碼強度還是不錯的,至少我找了好幾個工具,沒能順利破解出我的密碼內容。

2)sqlite資料庫加密

sqlite的資料庫加密也很簡單,我這裡使用sqlite developer開啟已有資料庫,然後在資料庫右鍵上選擇set encryption key,在彈出的對話方塊中輸入密碼即可。

我曾經專門針對sqlite資料庫機密機制做了一些了解,好像強度還是不錯,而且據說效能損失是很少的。我在開發測試的時候,效能方面確實看不出太大的干擾。

由於我們希望資料庫配置項盡可能簡潔,因此可以不用在配置檔案中指定訪問密碼,這樣也避免了加密字串的洩密問題,我們可以通過動態設定資料庫訪問物件database 的資料庫訪問密碼屬性進行記憶體上處理。如下**所示是對access資料庫連線字串進行增加加密字串的操作。

#region 連線字串加密
///

///根據配置資料庫配置名稱生成database物件

/// ///

protected

virtual

database createdatabase()

else

dbconnectionstringbuilder sb =db.dbprovide***ctory.createconnectionstringbuilder();

sb.connectionstring =getconnectionstring();

genericdatabase newdb = new

genericdatabase(sb.tostring(), db.dbprovide***ctory);

db =newdb;

return

db; }

//////

動態改變或者連線字串

/// ///

protected

virtual

string

getconnectionstring()

connectionstring += string.format("

jet oledb:database password=testpassword;");

}return

connectionstring;

}#endregion

通過在訪問資料庫的時候,動態增加加密的連線字串,在系統的配置檔案上,就和普通的沒什麼差別了,如下所示

<

connectionstrings

>

<

add

name

="access"

providername

="system.data.oledb"

connectionstring

="provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\database1.accdb;user id=admin;"

/>

<

add

name

="sqlite"

providername

="system.data.sqlite"

connectionstring

="data source=|datadirectory|\forummis.db;version=3;"

/>

connectionstrings

>

上面配置檔案,access資料庫用的是2007格式的,所以用了provider=microsoft.ace.oledb.12.0,如果是access2000的話,那麼就是provider=microsoft.jet.oledb.4.0(基於安全原因,不用)。

sqlite資料庫的操作也類似, 它的加密字串例子如下:data source=c:\mydb.db;version=3;password=mypassword;。

通過動態在連線字串中增加加密字串的方式,對於這些部署到客戶端的資料庫,第乙個是提高安全性,使用者分析不到那種加密型別;第二個是使用者連線字串不受干擾,可以正常閱讀;第三是不用引入更多的模組和**去實現。

Winform開發框架之介紹

框架已經正式改名為 yeswin開發框架,最新資料請前往 yeswinform 簡介 yes快速開發平台框架 yesdotnet.com winform開發框架,儘量減少程式設計師在介面中的 量和工作量,model自動生成,介面以及控制項自動生成,簡單的邏輯自動生成。自動生成的介面已經實現簡單邏輯增...

基於winform在ie中的實現

這兩天做個圖表的元件,用的是開源的nplot,效果卻是不錯,就是動態顯示座標時,速度有些慢。現在問題是想把其封裝在乙個winform中,實現我的ie圖表使用者互動顯示,走了一些彎路,剛開始準備直接用winform在ie顯示,後來經過多個環境測試,發現,單一的winform 不呼叫nplot 是可以實...

C 在WinForm開發中Label換行方法

第一種是把label的autosize屬性設為false,手動修改label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用。第二種是把label的dock設為fill,同時將autosize屬性...