2012-09-24 86 views
0

我有一個要求,允許用戶在第一次使用時指定連接到數據庫的連接字符串,並在稍後在Windows客戶端應用程序中進行更改。我目前的想法是將信息存儲在文本文件中,每次用戶打開應用程序時都會檢查這些文件,並在信息已被刪除或無效時提示用戶進行更新。我不確定這是否是一種安全的方法來處理這個問題,並希望其他建議能夠幫助我更好地管理此問題。WinForms動態指定和管理SQL連接字符串信息

回答

1

我想將它們存儲在app.config中,由於是通常的做法。您可以輕鬆修改代碼中的設置。 Here's how

它們也應該可能被加密,這也可以在應用程序啓動時完成。您可以像修改設置一樣方便地從代碼加密/解密。 Here's how

+0

我不知道你可以在運行時編寫和更改app.config文件中的設置。 – Kobojunkie

+1

通常,應用程序不應寫入其app.config文件 - 它們存儲在用戶沒有寫入權限的位置。 –

+0

+1 @ChrisTavares。這不是正確的解決方案 – jeroenh

1

可以

  1. 使用Windows身份驗證SQL,這樣你就不需要管理密碼。
  2. 使用CryptProtectData到編碼/解碼密碼,並保存在磁盤上的

從CryptProtectData文檔

CryptProtectData函數在 DATA_BLOB結構對數據執行加密。通常,只有與加密數據的用戶具有相同登錄憑證的用戶才能解密數據。在 另外,加密和解密通常必須在 同一臺計算機上完成。有關異常的信息,請參閱備註。

因此,即使SQL和窗戶可能有不同的登錄信息,如果有一個1-1映射您保存的密碼密文是比較安全的

0

我會將連接字符串存儲在App.Config或註冊表中。我不認爲你可以在運行時修改App.Config,所以如果你的應用程序使用的是數據庫,那應該是你的第一選擇。如果沒有,請使用平面文件或註冊表。你一定要加密它。請參閱this question關於如何對字符串進行加密和解密以及對Base64進行編碼。

0

首先,我不會編寫自己的對話框來獲取初始連接字符串;相反,您可以使用Microsoft發佈的VS2010數據庫連接對話框(download from here)。這將完全符合你的要求,而無需你付出艱苦的努力(以及幾乎任何你想要的遠程連接)。不,你的連接字符串信息的持久性,不應該引起任何重大的安全問題;因爲它應該爲連接提供安全性的連接字符串本身;您將必須確保保存的連接字符串不包含密碼 - 併爲每個連續的連接調出對話框。如果您使用Windows身份驗證,但沒有密碼,那麼當然可能存在安全問題,但我認爲這取決於用戶使用正確的安全性。

如果上述不足,我會將連接字符串存儲在Properties.Settings.Default中,並使用其中一個.NET庫或甚至散列來加密該字符串。有很多方法可以解決這個問題,但我會使用引用的對話框來獲取初始連接字符串,然後使用屬性將其保存在應用程序的.config文件中。簡單。

我希望這會有所幫助。