我找到了各种谷歌搜索结果,但似乎没有一个能解决我的问题。
我正在工作中设置一个新的 WINDOWS 2008 R2 框,该框将通过我们内部网中 IIS 7.5 中运行的 Web 工具与现有的 SQL 2012 框进行通信。我们将使用 Windows 身份验证 - IE -> Web 服务器 -> SQL。我们正在使用 Kerberos。在 Web 服务器上本地查看该工具时,一切都很好,但是一旦我尝试在远程客户端上查看它,我就会收到“用户‘NT AUTHORITY\ANONYMOUS LOGON’登录失败”错误。
让我来分解一下我们的网站 - 应用程序池以经典模式运行 .NET 2.0,其标识为 ApplicationPoolIdentity,Windows 身份验证已启用,扩展保护设置为关闭,选中启用内核模式身份验证,并且启用的提供程序(按顺序)为协商和 NTLM。启用 ASP.NET 模拟以模拟经过身份验证的用户。
SQL 连接字符串的格式如下:
Data Source=THESQLBOXNAME;Initial Catalog=DATABASENAME;Integrated Security=True
我有一个测试页面,已将其放置在 Web 服务器上(按照上述设置),它显示以下数据:
HttpContext.Current.User.Identity.IsAuthenticated
是真的
HttpContext.Current.User.Identity.Name
是预期用户(启动浏览器的用户)
System.Security.Principal.WindowsIdentity.GetCurrent.Name
是预期用户
我尝试对 SQL 框进行基本的 SQL 查询并收到上面提到的登录错误。
我已经检查了 AD 并确认 Web 框已设置委派 - “仅信任此计算机委派指定服务/仅使用 Kerberos”
我已经在运行 IIS 7.5(具有上述相同的设置)的现有 WINDOWS 2008 R2 机器上运行了此测试页,没有出现任何错误。
我检查了两个 Web 盒的 SPN 设置,它们是相同的(除了机器名称):
setspn -L EXISTINGBOX
WSMAN/EXISTINGBOX.domain.com
WSMAN/EXISTINGBOX
TERMSRV/EXISTINGBOX.domain.com
TERMSRV/EXISTINGBOX
HOST/EXISTINGBOX.domain.com
HOST/EXISTINGBOX
RestrictedKrbHost/EXISTINGBOX.domain.com
RestrictedKrbHost/EXISTINGBOX
setspn -L NEWBOX
WSMAN/NEWBOX.domain.com
WSMAN/NEWBOX
TERMSRV/NEWBOX.domain.com
TERMSRV/NEWBOX
HOST/NEWBOX.domain.com
HOST/NEWBOX
RestrictedKrbHost/NEWBOX.domain.com
RestrictedKrbHost/NEWBOX
我意识到它就像双跳问题一样,但它在另一个盒子上工作的事实让我认为这是新网络盒子特有的东西。我到底错过了什么??????
答案1
我能想到的最后两件事是检查您是否已在 SQL 服务器服务帐户下注册了 MSSQLSvc SPN(由于您有一个工作场景,因此您可能已经注册了)。以防万一:
- MSSQLSvc\NetBIOS
- MSSQLSvc\NetBIOS:1433
- MSSQLSvc\FQDN.域.com
- MSSQLSvc\FQDN.domain.com:1433
如果已完成,则返回到具有信任选项的 AD 选项卡,将 SQL 服务器帐户添加为允许的服务之一。如果操作正确,您应该会在列表中看到 MSSQLSvc*。
如果上述方法不起作用,那么您可能需要启用 Keberos 跟踪或使用网络跟踪来查找 Kerberos 错误。
答案2
检查非正常工作的 IIS 服务器是否设置了“信任计算机进行委派”: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx