【问题标题】:Impersonation and delegation (with SQL Server) in ASP.NETASP.NET 中的模拟和委托(使用 SQL Server)
【发布时间】:2011-08-29 22:35:42
【问题描述】:

我编写了一个简单的 ASP.NET 应用程序,它用作简单 MSSQL 数据库的前端。该应用程序可通过 Internet 访问。

涉及两台物理服务器:一台也运行 MSQL Server 2008 R2 的 WS2008R2 Active Directory 域控制器,另一台服务器是我的应用程序所在的网络服务器 (WS2008R2/IIS7.5)。

我的应用程序“FooPool”的应用程序池有自己的 AD 用户身份,它在“FooUser”下运行。 FooUser 没有任何访问 SQL Server 数据库的权限,而只有我自己的个人用户帐户“MyUser”拥有该权限。

想法是尝试访问此 Web 应用程序首先使用 IIS 执行 Windows 身份验证,然后我的 Web 应用程序使用 Impersonation 访问 SQL Server 数据库。

但是我的应用程序不起作用。

我在没有接触 SQL Server 的情况下测试了应用程序,只是为了测试模拟,所以我做了 Response.Write( WindowsIdentity.GetCurrent(false).Name );它正确显示了模拟 MyUser 而不是作为 FooUser 的应用程序。这适用于所有现代浏览器和整个互联网。

但是一旦它接触到 MSSQL Server,我就会收到错误消息“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。”但这不应该发生,因为没有用户令牌用于匿名登录。

我已经完成了作业并阅读了所有关于 ASP.NET 中的委派和模拟的内容,并且我已经设置了委派: FooUser 帐户具有服务主体名称设置(我将 SPN 设置为任意字符串,是这样做对吗?)并在 ADUC 中标记为委派。

最后,我的连接字符串启用了 SSPI,禁用了连接池,并且网络库设置为“dbmssocn”。

我还忘记了什么?

【问题讨论】:

  • 在 ADUC 中,在网络服务器的委托选项卡上,您选择了“仅信任此计算机以委托给指定的服务?”然后你已经从 SQL Server 机器上添加了 MSSQLSvc(以及正确的端口号)?
  • 网络服务器的计算机帐户没有配置为委派,只有运行应用程序池的用户身份。 “FooUser”帐户设置为“信任此用户以委托任何服务(仅限 Kerberos)”。
  • 不是计算机帐户...计算机本身仍需要委派。这听起来像是双跳问题。
  • 我的印象是,您可以对应用程序池身份或计算机帐户进行委派;两者都没有必要。
  • 好的 - 因此,一旦您选择了该身份的委派,您就选择了您创建的 SPN 并重新启动了 IIS?

标签: asp.net sql-server impersonation delegation


【解决方案1】:

完成委派工作的配置,您必须启用约束委派:

  1. 打开 Active Directory 用户和计算机
  2. 找到 IIS 网站用于 Web 应用程序池的用户帐户并双击它
  3. 选择选项:信任此用户以委托给指定
    仅限服务。
  4. 确保用户被限制在 与 MSSQLSvc 服务关联的 SPN
  5. 重启 IIS

http://blogs.technet.com/b/askds/archive/2008/11/25/fun-with-the-kerberos-delegation-web-site.aspx

【讨论】:

  • 我确实尝试过,但我最终破坏了我域的 SPN 设置。我必须获得 Microsoft 支持事件才能修复损坏。我还没有尝试让 SPN 再次工作(无论如何,SPN 有什么用?它们有什么用途,而 Windows 安全性尚未提供呢?)。
猜你喜欢
  • 2010-10-05
  • 2018-09-04
  • 2012-10-12
  • 2010-09-27
  • 2020-12-04
  • 1970-01-01
  • 2013-07-18
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多