请说明设置 SQL Server 链接服务器需要什么。
服务器 A 仅是 SQL 2005 Windows 登录名。服务器 B 相同(仅限 SQL 2005 Windows 登录)。
服务器 A 运行 Windows XP。服务器 B 运行 Windows Server 2003。
两个 SQL Server 服务都在同一个域帐户下运行。我使用在两个 SQL Server 上都具有管理权限的域帐户登录到我的工作站。
请注意,这些都是 SQL Server 2005 SP2 - 我已经向我指出了旧的修补程序,但那些已经应用了。
我遇到的问题是这个错误:
“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。(Microsoft SQL Server,错误:18456)”
根据我对这个问题的理解,这是一个“HOP”问题。
即您正在尝试使用服务器 A 将您的登录详细信息(使用 SSPI)中继到服务器 B。
在 SQL Server 2005 中,他们添加了一大堆安全问题,这使得这比应有的更难。“Kerberos 身份验证”这个词将成为大多数系统管理员/DBA 的生活的绊脚石。它有效地用于直通身份验证。
以下是您需要的基础知识。1) 需要在 Active Directory(AD) 中设置服务器(A 和 B),并启用 Kerberos 委派。(这是通过您的活动目录管理面板设置的)
2) 您的 SQL Server 运行的服务帐户也需要启用委派(这也可以通过您的活动目录管理面板设置)。- 如果它们没有在服务帐户下运行,您需要创建一个。
3) 服务器需要为实例和主机和机器名称定义 SPN。(使用 Windows 支持工具中名为 SetSPN 的工具)
支持工具(SetSPN 在此集中) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en
(如何添加 SPN 的概述) http://technet.microsoft.com/en-us/library/bb735885.aspx
4)您可能需要将您的数据库设置为“值得信赖”
ALTER DATABASE SET 值得信赖
5)完成所有这些后,重新启动您的实例。
6)然后尝试再次创建您的链接服务器。
最后,您可以测试与 SQL Server 的连接。如果您正确配置了所有内容,这应该可以正常工作。
这将告诉您您的连接身份验证类型。
您想在这里获得“KERBEROS”而不是“NTLM”。
这是一个滑坡,KERBEROS 和 Pass-through 委托,坚持下去,你最终会弄明白的。
参考 Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx
http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx
问题的其他表现 http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx
http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx
http://msdn2.microsoft.com/en-us/library/ms189580.aspx
我希望这一切都有帮助。
如果您对 GUI 更熟悉,也可以使用 SQL Server Management Studio (SSMS) 来管理\创建链接服务器。为此:
请注意,这假定在服务器 A 上登录的用户也在服务器 B 上登录。
我会因为同样的问题而发疯!我记得用 2000 做到这一点总是很容易。我一直在谷歌,我无法让它工作。完全相同的设置,两台服务器都在域帐户上运行,Windows auth。
我正在尝试使用命名管道而不是 TCP,至少我得到了一个不同的错误:
这可能与启用名称管道有关,但我可以通过 sqlcmd 从服务器 A 连接到服务器 B,如下所示:
如果我不使用命名管道,只需执行以下操作:
我明白了:
[编辑]我开始在 Sql Server Central 上讨论这个问题。基本上,您必须进行一些与 Kerberos 委托相关的复杂配置才能使其正常工作。
http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx
我决定只创建一个有限的 Sql 登录帐户来处理链接查询。我讨厌诉诸于此,但它似乎比您必须进行的更改以使其与 Windows auth 一起使用更安全。
如果您在 sp_addlinkedserver 和 sp_linkedservers 上进行搜索,您会得到一些示例。设置非常简单。
此外,如果您有 SQL 管理器,您可以使用它的 GUI 添加。
基本上,您需要通过 Tim 提到的 SP 或通过 GUI 链接两台服务器,然后设置访问规则(如果您在两台服务器上都使用 Windows 身份验证,则甚至不需要)。
我知道这应该很容易,但它根本不适合我——我在这里遇到了安全问题。所以我希望有人为我拼出步骤。
我过去在 SQL 2000 上做过这个,没有任何问题。
所以您可以链接它们,但由于帐户错误而无法执行查询?
您尝试使用的 Windows 用户是否有权读取两台服务器上的数据?
有一次我也遇到了问题,因为“数据访问”属性由于某种未知原因被设置为 false。
还可以尝试如果您明确将一个用户设置为另一个用户以获取链接,会发生什么情况。
(这些都可以在 SQL Manager 中完成。)
蒂姆发布了我认为正确的步骤。第 5 步是安全页面。我选择“使用登录的当前安全上下文进行”。
当我单击确定时,我收到以下错误。我不知道它为什么要使用“NT Authority\Anonymous login”。我使用在两台服务器上拥有所有权限的域帐户登录到我的工作站。
尝试在本地登录到服务器时执行此操作,如果您从远程计算机执行此操作,您可能无法发送正确的凭据。