Немного фона:
У меня есть решение, которое состоит из:
- Приложение IIS (ASP.NET)
- Служба Windows
И приложение IIS, и служба Windows запускаются под одной и той же учетной записью домена. Они также подключаются к одной и той же базе данных.
Учетные данные для доступа к базе данных хранятся в общем файле конфигурации и шифруются с помощью инструмента aspnet_regiis.exe. Разрешение ACL предоставляет доступ на чтение к контейнеру ключей для учетной записи домена.
Веб-приложение может получить доступ к контейнеру ключей и расшифровать строку подключения.
Служба, с другой стороны, не может получить доступ к контейнеру ключей RSA. Я получаю сообщение об ошибке:
Непредвиденная ошибка при попытке подключения к базе данных; исключение: System.Configuration.ConfigurationErrorsException: не удалось расшифровать с помощью поставщика «RsaProtectedConfigurationProvider». Сообщение об ошибке от провайдера: Не удалось открыть контейнер ключа RSA. (C:\ApplicationDir\ConnectionSettings.config, строка 2) ---> System.Configuration.ConfigurationErrorsException: не удалось открыть контейнер ключа RSA.
Обходные пути:
- Добавьте учетную запись домена в группу администраторов (да!)
- Добавьте учетную запись домена в группу IIS_IUSRS.
- Измените запись разрешения для группы «Все». По умолчанию разрешение на чтение применяется к Только этой папке. Изменение этого значения на Эта папка, вложенные папки и файлы работает.
- Добавьте запись разрешения для учетной записи домена в папку MachineKeys.
Я склоняюсь ко второму варианту, но что здесь происходит?
Почему пул приложений может работать под указанной учетной записью домена, а не служба Windows, которая работает под той же учетной записью домена?
Является ли это ситуацией, когда при определенных обстоятельствах учетная запись домена не считается частью группы «Все»?
Как лучше всего поступить в этой ситуации?
Спасибо, Кевин