2011-04-24 70 views
3

你好我試圖找到存儲的ConnectionString的最佳方式(或者一個好的)(我的應用程序將連接到服務器的數據庫,它會與它的工作時間可持續),以及如何與處理管理員帳戶。對於默認的所有登錄應用程序必須有一個管理員帳戶,對吧?Store中的ConnectionString

我這麼想......

所以,你在機器上安裝一個應用程序,你將如何配置的ConnectionString?我認爲這是錯誤的要求用戶配置這樣的事情,如果不明白它是什麼或它真的必須是什麼?

想象一下,有一天ConnectionString必須由於任何原因而被更改,如果管理帳戶登錄應用程序的憑據在服務器中的表中,那麼如何才能登錄到應用程序來更改的ConnectionString?

這是我的問題,現在......我不知道這個類型的事情的處理,如果有什麼規則來處理這個問題,任何常用的方法,因爲我開始使用這種類型的東西更認真地工作。

注:我認爲這並不重要,但我的應用程序正在WPF中開發。

+0

你在說什麼?你在連接什麼? – SLaks 2011-04-24 01:57:02

+0

我忘了提及...我的應用程序將與服務器中的數據庫一起工作,應用程序將連續連接到數據庫,所以我正在尋找配置應用程序將使用的機器中ConnectionString的最佳方式... – Miguel 2011-04-24 02:03:46

+0

你想連接到什麼數據庫,MySQL。 MS SQL Server? – Christo 2011-04-24 02:03:59

回答

2

使用連接字符串到MS SQL服務器,你基本上有兩種選擇:

  1. 無論是存儲的用戶名/密碼對在裏面。您的應用程序必須能夠讀取它,因此理論上,應用程序的任何用戶都可以執行相同的操作(他可以訪問您的應用程序,因此他可以對其進行反編譯)。實際上,您可以使用存儲在源代碼或應用程序資源中的密鑰對連接字符串進行加密,並確信您的用戶將無法讀取密碼。
  2. 如果您有一些用戶應該能夠使用該應用程序,並且您相信他們以及可能有權訪問您的應用程序但無法使用該應用程序的其他用戶,則可以使用Windows身份驗證並設置您的連接字符串中有Integrated Security=True。這假定您配置您的數據庫,以便批准的用戶有權訪問它。

無論哪種方式,您的連接字符串應與應用程序的其餘部分捆綁在一起。如果你需要改變它,你只需發佈一個新版本。 (即使對於最原始的安裝版本,也可以這樣工作:「將這一批文件複製到計算機上的目錄中」)。

現在,連接字符串可以存儲在幾乎任何地方,最方便的地方可能是application settings file

如果你想確定你的用戶只能使用你的應用程序提供的功能,而不是直接訪問數據庫,你必須寫一些類似Web服務的東西,並且只能間接地連接到數據庫通過這一點。

4

使用MS SQL Server執行DB訪問安全性的一種非常簡單的方法是使用「Integrated Security = SSPI」。這樣,MS SQL服務器就會根據運行數據庫訪問進程的Windows用戶實體進行身份驗證。這一切都可以毫無疑問地使用MS SQL Windows Authentication進行,無需在應用程序中存儲任何用戶名或密碼。

另一種方式來做到這一點是分發到它的數據庫連接字符串配置文件,至少有加密的密碼。

我們有幾臺服務器很多MySQL數據庫也一樣,所以MS SQL SSPI不包括美國。

對於服務器端軟件,我存儲數據庫連接字符串和憑據在所有的服務器端軟件使用一個單獨的XML配置文件。所有數據庫信息均已加密,憑證會進行局部安排。我爲所有服務器進程使用了​​一個公共文件,並開發了一個小小的加密/數據庫配置文件管理GUI,以便簡化管理並使用相同代碼對所有軟件進行訪問。

對於最終用戶軟件而言,由於用戶維護,使用本地配置文件進行維護太困難。對於「胖客戶端」軟件,我在我們的DMZ中的服務器上維護一個單獨的數據庫,加密憑證可供任何擁有該軟件的人(通常沒有那麼多分佈式胖客戶端軟件)訪問。我們的Web應用程序軟件具有統一的用戶數據庫它控制所有應用程序的所有用戶/角色的訪問權限,並且所有內容都通過一個系統進行傳輸,因此維護用戶數據庫要容易得多。

坦白地說,多邊形系統越來越難以維護。我會使用我們主要的域名LDAP服務器(Windows ADS),但是我們的公司政策保護所有域名成員服務器完全防止我們最信任的VPN之外的訪問,因此在許多情況下無法訪問。

我希望有一天能有時間來建立我們的DMZ中的* nix中基於LDAP服務器,並有集中所有的憑證信息。

+0

我知道集成安全性,但我必須在打開,通過SQL上的身份驗證以及通過Windows身份驗證中保留這兩個選項。但我必須存儲其他信息。在一件事情中,我將使用郵件服務器,它只能用於電子郵件的一個域,這是他們自己的。我將不得不讓他們配置它。那麼存儲這些配置的好方法在哪裏? – Miguel 2011-04-24 22:46:58

+0

@Miguel:我在上面添加了我的答案 - 太長的評論。 – Christo 2011-04-25 12:14:04

2

如果您需要將連接字符串存儲在配置文件或您選擇的其他位置,則可能需要對加密結果進行加密,並將加密結果編碼爲字符串。檢查here以獲取Encrypt()和Decrypt()實現。

0

在安裝應用程序的過程中,可以操作文件(例如.config文件)。因此,向用戶/管理員(在安裝過程中)詢問服務器的名稱是可以接受的(甚至對於用戶名和密碼,只要您對這些進行了加密,但我寧願使用集成安全性)。

對於連接字符串的更新只是建立一個新的安裝程序。

替代方法:將連接字符串存儲在活動目錄或其他知名商店中,因此您只需在一個位置更改值即可。