我想测试一个概念证明,我可以在两个链接的SQL Server上运行分布式事务,使用sp_addlinkedserver进行链接 - 它们的名称是Server1和Server2,两者都在默认实例下运行。每个服务器分别持有一个单一的数据库,源和目的与目标数据库存放名为输出一个表,即如何在链接服务器之间配置身份验证?
Server1.Source
Server2.Destination.Output
输出表的结构如下:
OUT_PKEY int identity(1,1) primary key,
OUT_TEXT nvarchar(255)
在Server1我呼吁的sp_addlinkedserver“服务器2”两个数据库链接,我已经尝试运行下面的查询,以测试该链接确实工作:
Select *
From Server2.Destination.dbo.Output
我回到了以下异常:
访问远程服务器被拒绝,因为没有登录映射存在。
不够公平,所以从Server1上,我跑sp_addlinkedsrvlogin“服务器2”其中根据文件说,它应该采取的任何人远程运行查询的用户凭据(即在Server1),并将这些凭据Server2上。这意味着,由于我使用Windows身份验证连接到Server1,这应该意味着我的Windows身份验证也适用于Server2。
现在异常消息更改为:
用户登录失败'NT AUTHORITY \ ANONYMOUS登录。
在谷歌搜索这个例外之后,我没有提出任何有用的信息,指出了我的正确方向。我错过了什么?我期望[如果登录失败]的例外引用我的 Windows凭据,而不是匿名登录凭据。
它看起来像一旦我得到链接本身的工作,分布式事务本身应该是一个相当简单的事情 - 文档意味着我只需要确保DTC服务在Server1上运行,并且任何查询在Server1上运行将通过链路进行交易:
- 包括SET XACT_ABORT ON之前初始化我的分布式事务
- 我用BEGIN代替分布式事务 BEGIN TRANSACTION
- 如果我想引用Server2上的SQL Server的非默认实例,我[Server2上\实例]替换名称Server2上的任何情况下我的查询
我的问题是这些:
- 如何通过此登录问题? sp_addlinkedsrvlogin单独的存储过程似乎没有办法。
- 它确实像运行分布式事务一样简单,正如文档所暗示的那样?
TIA