SQL Server 2008 的双跳问题

SQL Server 2008 的双跳问题

我正在尝试设置以下场景。我有 3 台服务器,它们都在同一个域中。

  • 服务器 A 具有在(域)服务帐户 dom\web 下运行的 Web 应用程序。
  • 服务器 B 具有 SQL Server 2008 R2 实例,它在(域)服务帐户 dom\sql 下运行。
  • 服务器 C 具有 SQL Server 2008 R2 实例,它在(域)服务帐户 dom\sql 下运行。

服务器 B 和 C 位于 SQL 群集中。B 和 C 的实例是链接服务器。

当我从 A 运行 SQL Server Management Studio 并使用我的域帐户(dom\usr)连接到 B 时,我尝试执行从 B 和 C 选择数据的查询并且它可以工作。

当我尝试使用相同方法的 Web 应用程序时出现错误:

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

我看到 SQL 中的连接对于用户 dom\web 具有 auth_scheme KERBEROS,所以它不是 NTLM。

此外,dom\web 域帐户在 AD 中没有选择“帐户敏感且无法委派”选项。

我还认为 SPN 设置正确,因为双跳在第一种情况下不起作用。

这是服务器 C 上的错误:

源登录

消息 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。原因:基于令牌的服务器访问验证因基础结构错误而失败。检查以前的错误。[客户端:10.65.10.53]

源登录

消息错误:18456,严重性:14,状态:11。

答案1

我相信 IIS 已使用 IUSR 帐户将网站设置为“匿名”。这将以匿名登录的形式在域中传播。

如果您打开 IIS 管理器,左侧会显示一棵树。在此树中,展开服务器,然后展开“站点”,然后单击您用于此项目的网站(即默认网站)。在 IIS 管理器的右侧,双击“身份验证”图标。在下一个屏幕上,右键单击“匿名身​​份验证”,然后从上下文菜单中选择“编辑”。确保已选择“特定用户”,然后单击“设置”按钮。将用户更改为 dom\web 并输入正确的密码。单击“确定”。

此时,您可能会遇到 dom\web 无法访问 SQL 服务器的问题。您必须为 dom\web 创建 SQL 登录名,然后在数据库中创建您希望 dom\web 可以访问的用户。

答案2

补充一下 - 我遇到过这样的情况:从 SSMS 运行查询有效,但从 IIS 通过应用程序前端运行查询无效。

我主要使用这两个链接来解决问题。Active Directory、配置文件、IIS 和操作系统有太多不同的设置需要考虑,这可能是您意想不到的事情。关键是要知道操作系统/IIS/SQL Server 认为发生了什么,请参阅下面的 DELEGCONFIG 链接。

因此,有关正确设置 SQL Server 的 Kerberos 圣经的链接是 –http://msdn.microsoft.com/en-us/library/ff679930(v=SQL.100).aspx。我知道它特定于 Reporting Services,但仍然适用于应用程序服务器,因为您可以将 Reporting Services 视为另一个应用程序。

我发现解决身份验证问题的最佳方法是使用名为 DELEGCONFIG 的工具;它可以帮助您设置正确的 SPN 以使 Kerberos 正常工作。您可以在此处找到该工具: http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1434。这是您在服务器上安装的 IIS 网站,它会告诉您 SPN 和委派是否设置正确。它还可以为您进行更改。我运行它直到所有检查都通过 - 如果您运行该工具,您就会明白。

我不会在生产环境中保留 DELEGCONFIG 网站,但在设置或让生产管理员设置数据库/应用服务器时,他们可以使用它来解决问题。一旦您正确完成设置,即可删除该网站或隐藏并保护它。

高血压

答案3

在服务器 B 和 C 上为 dom\web 创建登录名,并授予新创建的登录名对数据库的访问权限。

答案4

我记得过去遇到过类似的双跳问题,一些同事通过在服务启动时将 SQL 服务帐户设置为域管理员组的成员,然后将其删除来解决。这是 SPN 的问题。

这可能不是解决问题的正确方法,但它在计划外停机的关键时期使一切恢复正常运转。

相关内容