从Intranet应用程序写入Windows注册表
问题描述:
我有一个Intranet Web应用程序,其中加密的连接字符串存储在Windows注册表中(连接字符串由一些其他应用程序共享)。应用程序托管在Windows 2012服务器上。在开发/测试环境(不是生产)中,我希望能够修改此密钥,以便我可以切换到不同的数据库。从Intranet应用程序写入Windows注册表
我似乎不能够写,我不断收到根据不同的错误,我如何对待它:
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 = @"domain\userid";
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.config文件中读取数据,然后获取共享设置,如此处所述。
为什么使用注册表? Web.config更适合这种事情。 – Colin
正如我所提到的,连接字符串在同一台服务器上的其他几个应用程序中很常见,所以不是所有应用程序都试图在连接字符串上保持同步,而是决定将其加密并将其放入注册表中,以便所有可以使用相同的最新连接字符串(一个地方更新) – NoBullMan