2016-04-23 2 views
0

У меня есть веб-приложение интрасети, где зашифрованная строка соединения хранится в реестре Windows (строка подключения разделяется некоторыми другими приложениями). Приложение размещено на сервере Windows 2012. В средах разработки/тестирования (не для производства) я хочу иметь возможность модифицировать этот ключ, чтобы я мог переключаться на разные базы данных.Запись в реестр 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.config, а затем получить общую настройку примерно так, как описано здесь.

IIS web.config - same file for multiple websites

+0

Спасибо. Это просто для dev/test серверов приложения интрасети, и у меня нет упомянутого вами варианта. просто нужно знать, почему я получаю эти ошибки. – NoBullMan

+0

Можете ли вы вручную добавить ключ в реестр, чтобы вы, по крайней мере, беспокоились только о разрешениях на чтение? – Colin

Смежные вопросы