自动加密 Web.config 中的连接字符串

本文关键字:连接 字符串 config 加密 Web | 更新日期: 2023-09-27 18:36:24

>我有以下类来加密连接字符串

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Security;
using System.Configuration;
namespace App.WebUI.Infrastructure
{
    public static class ConnectionStringEncryption
    {
        private static readonly string Path = HttpRuntime.AppDomainAppVirtualPath;
        public static void EncryptConnString()
        {
            Configuration config = WebConfigurationManager.OpenWebConfiguration(Path);
            ConfigurationSection section = config.GetSection("connectionStrings");
            if (!section.SectionInformation.IsProtected)
            {
                section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
                config.Save();
            }
        }
        public static void DecryptConnString()
        {
            Configuration config = WebConfigurationManager.OpenWebConfiguration(Path);
            ConfigurationSection section = config.GetSection("connectionStrings");
            if (section.SectionInformation.IsProtected)
            {
                section.SectionInformation.UnprotectSection();
                config.Save();
            }
        }
    }
}

在全球.asax.cs

        if(!System.Diagnostics.Debugger.IsAttached)
            ConnectionStringEncryption.EncryptConnString();

当我尝试在本地没有"if(!System.Diagnostics.Debugger.IsAttached)"工作正常,但是当我发布时,我收到以下错误。对路径"...''web.config"的访问被拒绝。

我无权更改服务器中文件的权限,也不想这样做。

有没有另一种方法可以在不更改权限的情况下完成此操作?

谢谢

自动加密 Web.config 中的连接字符串

出于显而易见的原因,加密 web.config 文件的过程需要权限才能写入该文件。也许您应该问的问题是,如何以有权写入文件的用户身份运行进程。我的回答是,您要么更改 AppPool 以使用有权编写文件的用户,要么将代码放在另一种执行的可执行文件中,例如,在安装时(作为管理员)而不是在运行时执行。

如果由于没有正确的计算机密钥而在解密加密的 web.config 文件时遇到问题,则应设计一个过程,在安装过程中而不是在应用程序运行时对目标计算机上的文件进行加密。您需要询问有关发布过程的更多信息,因为您不应使用运行应用程序的同一帐户加密文件。您应该有一个在目标计算机上运行的安装过程。