一些背景:
我有一个解决方案,包括:
- IIS 应用程序 (ASP.NET)
- 视窗服务
IIS 应用程序和 Windows 服务都在同一个域帐户下运行。它们还连接到同一个数据库。
数据库访问凭据存储在一个通用配置文件中,并使用aspnet_regiis.exe工具进行加密。ACL 权限授予对域帐户的密钥容器的读取访问权限。
Web 应用程序可以访问密钥容器并解密连接字符串。
另一方面,该服务无法访问 RSA 密钥容器。我得到错误:
尝试连接数据库时出现意外错误;异常:System.Configuration.ConfigurationErrorsException:无法使用提供程序“RsaProtectedConfigurationProvider”解密。来自提供程序的错误消息:无法打开 RSA 密钥容器。(C:\ApplicationDir\ConnectionSettings.config 第 2 行)---> System.Configuration.ConfigurationErrorsException:无法打开 RSA 密钥容器。
解决方法:
- 将域帐户添加到管理员组(哎呀!)
- 将域帐户添加到 IIS_IUSRS 组
- 更改所有人组上的权限条目。默认情况下,读取权限仅应用于此文件夹。将此值更改为此文件夹、子文件夹和文件似乎有效。
- 在MachineKeys文件夹中为域帐户添加权限条目
我倾向于选项2,但这里到底发生了什么?
为什么应用程序池可以在所述域帐户下运行,而不是在同一域帐户下运行的 Windows 服务?
这是在某些情况下域帐户不被视为所有人组的一部分的情况吗?
处理这种情况的最佳做法是什么?
谢谢,凯文