asp.net - ASP.NET 中的模拟和委托(delegate)(使用 SQL Server)

标签 asp.net sql-server impersonation delegation

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

涉及两个物理服务器:一个 WS2008R2 Active Directory 域 Controller ,它也运行 MSQL Server 2008 R2,另一个服务器,我的应用程序所在的网络服务器 (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' 登录失败”。但这不应该发生,因为没有用户 token 用于匿名登录。

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

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

我还忘记了什么?

最佳答案

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

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

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

    关于asp.net - ASP.NET 中的模拟和委托(delegate)(使用 SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077046/

    相关文章:

    c# - 在静态属性 getter 中创建的新对象是否只创建一次?

    sql-server - 从列表中返回随机值

    c# - 为模拟 token 调用 DuplicateTokenEx 后仍然出现重复 token 错误

    javascript - 如何在不重新加载页面的情况下重置文本框值

    c# - 将字节数组插入 SQL Server 数据库表

    javascript - 如何从应用于正文的 css 中排除特定的表单

    c# - sql server 是否限制连接到它的 IP 数量?

    sql-server - 带 SSL 的 MSSQL : The target principal name is incorrect

    Windows 模拟 token 过期时间

    asp.net - 设置 validateIntegratedModeConfiguration=false 以继续使用身份 impersonate=true 是否安全?