2011-04-28 97 views
2

我想加密我的web.config的連接字符串。 Here我發現了一個很好的例子,說明如何做到這一點。我實現了這一點,並在我的開發機器上運行find。 但是如果我把它上傳到供應商,它不與下面的錯誤工作:加密Web.Config中的連接字符串失敗

[拋出:SecurityException:請求失敗] System.Configuration.DpapiProtectedConfigurationProvider.Encrypt(XmlNode的節點)

this博客我已閱讀,這是因爲網絡可能運行在中等信任,因此WebConfigurationManager.OpenWebConfiguration不能使用。相反,應該使用WebConfigurationManager.GetSection。但是,如果我所提出的部分,調用ProtectSection失敗,出現以下錯誤信息:

System.InvalidOperationException:此操作在運行時不

申請

誰能領我到一個解決方案,如何在web.config文件中(運行時)對連接字符串進行編碼(和解碼)?

更新
不是一個真正的問題的答案,但主控器給予了充分的信任網絡,現在,所有工作得很好。我離開這個問題,也許有人發佈了原始問題的解決方案,並幫助這些人有同樣的問題,但沒有得到充分的信任。

回答

1

http://msdn.microsoft.com/en-us/library/89211k9b%28v=vs.80%29.aspx

static void ToggleWebEncrypt() 
{ 
    // Open the Web.config file. 
    Configuration config = WebConfigurationManager. 
     OpenWebConfiguration("~"); 

    // Get the connectionStrings section. 
    ConnectionStringsSection section = 
     config.GetSection("connectionStrings") 
     as ConnectionStringsSection; 

    // Toggle encryption. 
    if (section.SectionInformation.IsProtected) 
    { 
     section.SectionInformation.UnprotectSection(); 
    } 
    else 
    { 
     section.SectionInformation.ProtectSection(
      "DataProtectionConfigurationProvider"); 
    } 

    // Save changes to the Web.config file. 
    config.Save(); 
} 

UPDATE

同時,確保您的服務帳戶具有寫權限的Web.config。此外,請注意,在Web.config上向您的服務帳戶授予寫入權限會增加應用程序的安全性。只有當你瞭解並接受風險時才這樣做。

+0

感謝您的回答。但是,行配置配置= WebConfigurationManager.OpenWebConfiguration(「〜」);異常的來源,IIS不會執行它並引發SecurityException! – HCL 2011-04-28 20:55:04

+0

@HCL:您的服務帳戶是否對web.config文件具有寫入權限? – kbrimington 2011-04-28 20:56:07

+0

@kbrimington:是的,主機的配置工具允許我在目錄庫上授予權限,並且對根目錄(也是虛擬目錄)給出了測試IUSR讀/寫權限。 – HCL 2011-04-28 21:03:24