加密Web.Config中的连接字符串失败

时间:2011-04-28 20:45:13

标签: asp.net iis-7 web-config

我想加密web.config的连接字符串。 Here我找到了一个很好的例子来说明如何做到这一点。我实现了这个,并在我的开发机器上运行查找。 但是,如果我将其上传到提供程序,则无法使用以下错误:

[SecurityException:请求失败。]    System.Configuration.DpapiProtectedConfigurationProvider.Encrypt(XmlNode节点)

this博客中,我读过,这是因为网络可能以中等信任方式运行,因此无法使用WebConfigurationManager.OpenWebConfiguration。而不是这个,应该使用WebConfigurationManager.GetSection。但是,如果我按照建议获得该部分,则对ProtectSection的调用将失败,并显示以下错误消息:

System.InvalidOperationException:此操作在运行时不适用

任何人都可以引导我找到解决方案,我如何编码(和解码)web.config文件中的连接字符串(在运行时)?

更新
这个问题不是真正的答案,但是主持人完全信任网络,现在一切正常。我打开问题,也许有人发布原始问题的解决方案,并帮助这些人遇到同样的问题,但没有得到完全的信任。

1 个答案:

答案 0 :(得分: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();
}

<强>更新

此外,请确保您的服务帐户具有对Web.config的写入权限。此外,请注意,在Web.config上向服务帐户授予写入权限会增加应用程序的安全性。只有了解并接受风险,才能这样做。