2011-04-28 96 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