2016-04-23 58 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