2016-04-23 100 views
0

我有一个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." 
+0

为什么使用注册表? Web.config更适合这种事情。 – Colin

+0

正如我所提到的,连接字符串在同一台服务器上的其他几个应用程序中很常见,所以不是所有应用程序都试图在连接字符串上保持同步,而是决定将其加密并将其放入注册表中,以便所有可以使用相同的最新连接字符串(一个地方更新) – NoBullMan

回答

0

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

最好让所有的web应用程序有权从同一个web.config文件中读取数据,然后获取共享设置,如此处所述。

IIS web.config - same file for multiple websites

+0

谢谢。这仅适用于Intranet应用程序的开发/测试服务器,我没有您提到的选项。只需要知道为什么我会收到这些错误。 – NoBullMan

+0

您可以手动将密钥添加到注册表中,以便至少只需担心读取权限? – Colin

相关问题