gpt4 book ai didi

sql-server-2005 - 如何配置链接服务器之间的身份验证?

转载 作者:行者123 更新时间:2023-12-03 01:17:43 25 4
gpt4 key购买 nike

我正在尝试测试一个概念证明,即我可以在两个链接的 SQL Server 上运行分布式事务,使用 sp_addlinkedserver 进行链接 - 它们的名称是 Server1 和 Server2,两者都在默认实例下运行。每个服务器分别保存一个数据库,源和目标,目标数据库保存一个名为输出的表,即

Server1.Source
Server2.Destination.Output

OUTPUT 表具有以下结构:

OUT_PKEY int identity(1,1) primary key,
OUT_TEXT nvarchar(255)

在 Server1 中,我调用了 sp_addlinkedserver 'Server2' 来链接两个数据库,并且我尝试运行以下查询来测试该链接是否确实有效:

Select   *
From Server2.Destination.dbo.Output

我收到以下异常:

Access to the remote server is denied because no login-mapping exists.

很公平,所以从 Server1 运行 sp_addlinkedsrvlogin 'Server2' 根据文档,它应该获取远程运行查询的人员的用户凭据(即从 Server1)并应用这些凭据Server2 的凭据。这意味着,由于我使用 Windows 身份验证连接到 Server1,这意味着我的 Windows 凭据也适用于 Server2。

现在异常消息更改为:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

在 Google 上搜索了这个异常后,我没有发现任何有用的信息可以为我指明正确的方向。我缺少什么?我希望[如果登录完全失败]异常会引用我的 Windows 凭据,而不是匿名登录凭据。

看起来一旦我让链接本身正常工作,分布式事务本身应该是一个相当简单的事情 - 文档暗示我只需要确保 DTC 服务在 Server1 上运行,并且任何查询在 Server1 上运行将通过链接进行交易:

  • 在初始化我的分布式事务之前包含SET XACT_ABORT ON
  • 我使用BEGIN DISTRIBUTED TRANSACTION而不是BEGIN TRANSACTION
  • 如果我希望引用 Server2 上 SQL Server 的非默认实例,我可以将查询中名称为 Server2 的任何实例替换为 [Server2\InstanceName]

我的问题是:

  • 如何解决此登录问题? sp_addlinkedsrvlogin 存储过程本身似乎并不能解决问题。
  • 运行分布式事务确实如文档所暗示的那么简单吗?

TIA

最佳答案

如果您位于域中,则设置应为“使用登录名的当前安全上下文进行”,但还有一个步骤 - 您需要向事务中涉及的每台服务器授予 SPN。

假设您以域用户身份在两台服务器上运行 SQL 服务(您需要这样做才能完成这项工作 - LocalSystem 不会这样做),以下是您需要的说明:

http://technet.microsoft.com/en-us/library/bb735885.aspx

请记住,用户将需要两个服务器的 SPN,但客户端不需要 - 例如,如果您从客户端 -> 服务器 1 -> 服务器 2,SQL 服务帐户将需要服务器 1 和服务器 2 的 SPN。

如果您感到困惑(这是一个令人困惑的过程),请发表评论,我会澄清说明。

关于sql-server-2005 - 如何配置链接服务器之间的身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com