2012-06-03 100 views
1

我有一個C#2010 Winforms應用程序使用OleDb連接到受密碼保護的Access 2010數據庫。 這不是一個在線應用程序!C#Winforms應用程序安全連接到Access數據庫

我目前在連接字符串[我知道這是非常不安全的]用純文本存儲密碼,這是使用Eazfuscator.NET混淆。我對安全地存儲密碼的方式很感興趣,因爲它不能通過反編譯或其他實際方法獲得。

據我所知,有一些方法通過加密在app/web.config中的連接字符串,這樣做的ASP.NET應用程序,但因爲我的應用程序是一個桌面應用程序它不會爲我工作。

到目前爲止,我沒有發現任何的方法來實現這一目標。

這是我想到要乾的:

請求來自用戶的密碼,因爲將有唯一一個誰可以訪問數據庫的用戶。獲取輸入密碼的散列(SHA1/SHA512),從散列中選擇一定數量的字符,將其加入,將其添加到連接字符串並嘗試連接。

顯然,如果用戶將忘記了密碼,就絕對沒有辦法來訪問比使用蠻力其他數據庫。

有什麼辦法來存儲程序在連接字符串中使用的密碼,以便它可以不受任何實際的方式獲得?

+0

爲什麼不直接使用用戶的密碼? – SLaks

+0

因爲他可能會使用一個很容易受到字典攻擊的密碼。 –

+0

但是,如果您只是使用更簡單的密碼來保護更復雜的密碼,那就沒有任何好處。 (除非你試圖防禦擁有數據庫但沒有配置的人) – SLaks

回答

1

您應該爲數據庫生成一個長的隨機安全密碼,然後使用ProtectedData類對其進行加密。
這將使用用戶的Windows登錄密碼對其進行加密,因此除非用戶登錄,否則讀取它將不切實際。

+0

我有兩個關於這種方法的問題: 1.如果壞人可以訪問受害者的筆記本電腦並登錄他的賬戶,他是否可以通過分析應用程序獲得密碼? 2。客戶可以在另一臺計算機上使用該程序嗎? –

+1

我認爲你在這裏死了。你在應用程序中放置的所有東西都可以逆轉。這只是時間和工具可用的問題。通過混淆進行安全性不是安全性。對於第二個問題,我認爲答案是否定的,據我所知,ProtectedData不能用於使用不同的用戶配置文件解除保護。但我在等待專家來這裏快速。 – Steve

+0

那麼那會比我的想法更糟糕,因爲如果電腦死了(他會備份數據庫),他將完全失去對數據庫的訪問權限。謝謝您的幫助。 –

0

您可以使用DSN並在那裏存儲用戶名和密碼,而不是在應用程序中,但是任何知道DSN的應用程序都可以使用該數據庫,並且憑證可在註冊表中以純文本形式提供。

什麼是你想抵禦,應用漸入瘋狂?數據庫?未經授權的用戶坐在機器上?密碼必須居住的地方......

+0

最重要的是保護數據庫不受任何未經授權的訪問。我最感興趣的是防止管理員複製數據庫和程序訪問數據庫。另外,如果筆記本電腦被盜,我不希望竊賊能夠訪問數據庫。我知道所有這些可能聽起來都很偏執,但考慮到存儲的信息的性質,我不會冒險。 –

+1

然後,您不能在筆記本電腦上存儲密碼,您需要詢問用戶(或一些變體)。另一種選擇是不將數據庫存儲在筆記本電腦上(可能使用網絡驅動器),因此小偷不會獲取數據庫。 – AUSteve

+0

那麼沒有辦法將密碼存儲在程序中,用戶無法找到它,對嗎? –

相關問題