1

一些背景:

我有一个解决方案,包括:

  • 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 密钥容器。

解决方法:

  1. 将域帐户添加到管理员组(哎呀!)
  2. 将域帐户添加到 IIS_IUSRS 组
  3. 更改所有人组上的权限条目。默认情况下,读取权限仅应用于此文件夹。将此值更改为此文件夹、子文件夹和文件似乎有效。
  4. 在MachineKeys文件夹中为域帐户添加权限条目

我倾向于选项2,但这里到底发生了什么?

为什么应用程序池可以在所述域帐户下运行,而不是在同一域帐户下运行的 Windows 服务?

这是在某些情况下域帐户不被视为所有人组的一部分的情况吗?

处理这种情况的最佳做法是什么?

谢谢,凯文

4

1 回答 1

4

所以事实证明,需要向域帐户的“NetFrameworkConfigurationKey”授予读取访问权限。

aspnet_regiis -pa "NetFrameworkConfigurationKey" "[DOMAIN_NAME]\[USER_ACCOUNT]"

更多信息: http: //msdn.microsoft.com/en-us/library/yxw286t2 (v=vs.100).aspx

于 2014-11-20T00:05:15.263 回答