从内部网应用程序写入 Windows 注册表



我有一个内部网Web应用程序,其中加密的连接字符串存储在Windows注册表中(连接字符串由其他一些应用程序共享)。应用程序托管在 Windows 2012 服务器上。在开发/测试环境(非生产环境)中,我希望能够修改此密钥,以便可以切换到不同的数据库。

似乎无法写它,根据我的处理方式,我不断收到不同的错误:

string sKeyValue = "SOFTWARE\SomeProject\SomeApp";
RegistryKey rk;
rk = Registry.LocalMachine.OpenSubKey(sKeyValue, true); // Requested registry access is not allowed.

试:

RegistryPermission p = new RegistryPermission(RegistryPermissionAccess.AllAccess, sKeyValue);
p.Assert();

RegistrySecurity rs = new RegistrySecurity();
RegistryKey key = Registry.LocalMachine;
rs = key.GetAccessControl();
string sUser = @"domainuserid";
rs.AddAccessRule(new RegistryAccessRule(sUser, RegistryRights.WriteKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
key.SetAccessControl(rs); //Exception: "Attempted to perform an unauthorized operation."

允许从 Web 应用程序对注册表进行写入访问只是一个坏主意。通过 Web 代码自动设置权限很危险,并且要求代码具有过于提升的权限。

最好向所有 Web 应用授予从同一 web.config 文件读取的权限,然后获取类似于此处所述的共享设置。

IIS web.config - 多个网站的相同文件

最新更新