我想在仅安装了 SQL Management Studio 的开发服务器中创建数据库服务器 B 到数据库服务器 A 的链接服务器。所有三台服务器都在同一个域中。错误信息
用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。(Microsoft SQL Server,错误:18456)
当我想创建链接服务器时。
我不明白为什么,因为我成功地在另一台服务器上创建了链接服务器,实际上安装了 SQL 服务器,但我认为这与它没有任何关系。
我试着照顾这个问题,但我无法解决它。
更新
https://www.sqlservercentral.com/blogs/how-to-resolve-user-error-in-kerberos-configuration-manager
您应该编写出 Linked Server 对象的脚本并将该脚本添加到您的帖子中,这样我们就有更多工作要做。
当我看到错误消息时:
而且我知道至少有 3 台服务器在运行(正如您提到的“所有三台服务器都在同一个域中”),然后我的第一个想法是检查正确的SPN设置和Kerberos 委派。在前面提到的 SPN 联机丛书中,在链接服务器和委派部分下,它甚至提到“与链接服务器的委派需要 Kerberos 身份验证。 ”。
我过去曾多次遇到此错误,因为我的 SPN 设置不正确,或者因为我试图在其间使用链接服务器的两台服务器之间未配置 Kerberos 委派。委派在这些服务器之间建立信任,这样当您从第三台服务器连接到服务器时,您就可以
A
从服务器上的链接服务器访问服务器。这称为双跃点,并且必须通过委派建立信任,以允许 Kerberos 连接从服务器到服务器一直通过您的 Windows 身份验证,作为安全措施。B
B
C
C
A
以上假设在您的链接服务器对象中,在安全部分下,您选择了“使用登录的当前安全上下文进行制作”,它试图传递当前经过身份验证的用户的安全上下文。
或者,如果您将其更改为“使用此安全上下文进行”并输入有权访问 server 的 SQL 登录(而不是 Windows 身份验证登录)的凭据
A
,那么这也可以解决您的问题。因为现在,它不再尝试传递当前经过身份验证的用户的安全上下文,而是使用指定的 SQL 登录之一。从安全角度来看,这使其不再是双跳。该解决方案的缺点是您必须确保您选择的 SQL 登录在
A
支持链接服务器的所有用例的服务器上具有适当的访问权限。使用该链接服务器的任何人现在都将A
作为您在链接服务器对象中输入凭据的 SQL 登录名访问服务器。您必须小心在服务器上的 SQL 登录权限的过度和不足之间划清界限A
。如果您想使用正确的 Kerberos 委派配置的第一个选项并且需要任何其他帮助,您可以通过在ServerFault上发布来找到更多知识渊博的信息,因为这更多的是基础架构/安全主题,而不是数据库主题。