2010-10-15 45 views
5

我收集了一些我已經研究完成本文主題的方法以及我遇到的問題(希望有用)。請告訴我,你是否找到了更好的其他方式,特別是如果他們解決了我提到的方法所沒有的問題。ASP.NET連接字符串部署的最佳實踐

  1. 在web.config中離開連接字符串和使用XDT/msdeploy改造根據我的積極構建配置(例如,web.PublicTest.config文件)與設置來替換它們。我的問題是我合併並將一些特定於服務器的設置隱藏到一個具有許多配置元素的全局相同的文件中。另外,我不能在多個同級應用程序之間共享連接字符串定義。

  2. 指定configSource =「DeveloperLocalConnectionStrings.config」爲在web.config中連接字符串值,並且XDT改變這個值,以指向在我的代碼庫的多個特定於環境的文件之一。我的問題是,我將所有環境的密碼發送到所有目的地(當然除SVN外),並將未使用的配置部分放在等待意外使用的服務器上。

  3. machine.config文件中的特定連接字符串,而不是web.config。問題:heck希望在machine.config中找到連接字符串,並且因此出現意外名稱衝突的可能性很高。

  4. 指定一個configSource =「LocalConnectionStrings.config」,不要轉換該值,並編輯項目xml以排除連接字符串config的部署。 http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment - 這是我發現的解決我對專有(非分佈式)Web應用程序需求的最佳解決方案,但是我很偏執,另一名團隊成員會有一天來複制生產站點以測試某些原因,並且瞧!生產數據庫現在在UAT期間被修改。 (更新:我發現在這種情況下我不能使用一鍵發佈,只有帶-skip參數的msdeploy命令行。排除上面的文件與將其設置爲「無」編譯操作而不是「內容「,並導致軟件包從部署目標中刪除它。)

  5. 連接部署包以提示連接字符串,如果它尚未設置(我不知道如何執行此操作但我知道這是可能的)。這與上述#4有相似的結果。

  6. 指定一個configSource =「.. \ ConnectionStrings.config」。對我的需求會很好,因爲我可以在我選擇的應用程序中共享配置,並且在我的應用程序目錄中沒有任何特定於計算機的配置。不幸的是父路徑在這個屬性中是不允許的(比如它們是'appSettings file =「'' - 也請注意,你可以在配置源=引用內使用file = =)。

p.s.這些解決方案都在這裏討論:ASP.Net configuration file -> Connection strings for multiple developers and deployment servers

回答

1
  1. 使用主機名作爲ConnectionString的關鍵,這樣你可以自動地選擇數據源。確保選擇程序不是越野車(更改主機名 - 測試!)...

  2. 不要把它放在web.config中,寫一個ini文件,這樣就沒有XML編碼。

  3. 用私鑰/公鑰(RSA/PGP)加密其中的密碼。千萬不要使用明文或對稱密鑰,這同樣很糟糕。

+0

1.我喜歡它 - 雖然,你要笑,但目前測試和開發應用程序池相同的IIS服務器上運行。 – Shannon 2010-10-15 07:46:22

+0

2.你能澄清嗎?這個ini文件可以使用相同的庫方法嗎?具體來說,我有一個實體框架格式化連接字符串。 – Shannon 2010-10-15 07:47:47

+0

3.謝謝你,我不知道我可以在連接字符串中使用非對稱密鑰,或者加密連接字符串(無論你的意思)。我將研究以瞭解更多關於如何完成的內容。 – Shannon 2010-10-15 07:52:25

0

檢查我下面的博客文章:Protecting asp.net machine keys and connection strings

如果使用困惑的答案,可以使用一鍵,這不是在該網站的文件夾,就像asp.net不與受保護的配置部分。

我們手動批准對進入分段/生產的web.config所做的更改。在可能的情況下,我們使用集成代替用戶名,但是我們在後面的例子中使用的選項是僅爲SVN中的用戶名/密碼佔位符。

我們以前使用過單獨的配置文件,但是我們遇到了其他類型的web.config修改問題,所以我們最近一直在鎖定它。

+0

謝謝Eglasius。我喜歡集成安全的想法。它曾經是我的MO,我不記得我爲什麼停下來。正如我們都經歷過的,人際交往的每一點都是等待發生的宕機。 – Shannon 2010-10-16 00:45:33

3

使用SQL Server時,還可以使用Integrated Security/SSPI並將WebServer計算機登錄添加到Sql Server。

通過這種方式,您不必在web.config中公開任何內容,並且可以像對其他任何數據庫用戶那樣向該登錄名授予角色。

雖然您必須瞭解需要採取的含義和安全考慮因素,因爲作爲該計算機執行的任何惡意代碼都可以訪問Sql Server。

與問候 奧萊

+0

太棒了,謝謝Ole。 Eglasius簡單地提到了「集成」,但沒有提到添加登錄。請注意,對不共享域的服務器有限制。您可以保存遠程服務器密碼,但不能用於MSSQL文件流類型列,並且還有其他限制。 – Shannon 2010-10-21 05:19:48