ASP.NET中的模拟和委派(使用SQL Server)

时间:2011-05-20 20:02:42

标签: asp.net sql-server impersonation delegation

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

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

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

想法是尝试访问此Web应用程序首先使用IIS执行Windows身份验证,然后我的Web应用程序使用模拟来访问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”。

我还忘记了什么?

1 个答案:

答案 0 :(得分:2)

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

  1. 打开 Active Directory用户和计算机
  2. 找到IIS网站用于Web应用程序池的用户帐户,然后双击它
  3. 选择选项:信任此用户以获取指定的委托 仅限服务。
  4. 确保用户受限于 与MSSQLSvc服务关联的SPN
  5. 重新启动IIS
  6. http://blogs.technet.com/b/askds/archive/2008/11/25/fun-with-the-kerberos-delegation-web-site.aspx