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

发布于 2024-11-08 22:30:00 字数 870 浏览 2 评论 0 原文

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

涉及两台物理服务器:一台也运行 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”。

我还忘记了什么?

I've written a simple ASP.NET application that works as a frontend for a simple MSSQL database. The application is accessible over the Internet.

There are two physical servers involved: a WS2008R2 Active Directory domain controller which is also running MSQL Server 2008 R2, and another server, the webserver (WS2008R2/IIS7.5) where my application resides.

The Application Pool for my application "FooPool" has its own AD User identity it runs under "FooUser". FooUser does not have any permission to access the SQL Server database, instead only my own personal user account "MyUser" has that permission.

The idea is that attempts to access this web application first perform Windows Authentication with IIS, my web application then uses Impersonation to access the SQL Server database.

However my application does not work.

I tested the application without it touching SQL Server, just to test impersonation, so I did Response.Write( WindowsIdentity.GetCurrent(false).Name ); which correctly shows the application impersonating MyUser and not acting as FooUser. This works from all modern browsers and across the Internet.

But as soon as it touches MSSQL Server I get the error "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'." but that should not be happening because no user tokens are for Anonymous Logon.

I've done my homework and read all about Delegation and Impersonation in ASP.NET and I have set up delegation: The FooUser account has a Service Principal Name set-up (I set the SPN to an arbitrary string, is that doing it right?) and is marked for delegation in ADUC.

Finally, my connection string has SSPI enabled, Connection pooling disabled, and the network library set to "dbmssocn".

What else am I forgetting?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖微凉心微凉 2024-11-15 22:30:00

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

  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

Finishing the Configuration for Delegation to Work you must enable constrained delegation:

  1. Open Active Directory Users and Computers
  2. Find the user account that the IIS Web site is using for the web application pool and double-click it
  3. Select the option: Trust this user for delegation to specified
    services only.
  4. Make sure that the user is constrained to the
    SPN associated with the MSSQLSvc service
  5. Restart IIS

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文