我想测试一个概念证明,我可以运行的一个分布式交易跨越两个联SQL服务器的链接使用sp_addlinkedserver-他们的名字是1和2,这两个运行下默认的实例。每个服务器持有一个单一的数据库,来源和目的分别和目标数据库保持一个单一的表格所谓的输出,即

Server1.Source
Server2.Destination.Output

输出表具有以下结构:

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

从1我已经被称为 sp_addlinkedserver'2' 连接两个数据库和我已经尝试运行以下查询,以试验的链接,并确的工作:

Select   *
From     Server2.Destination.dbo.Output

我返回的以下例外:

访问的远程服务器被拒绝,因为没有登录-映存在。

不够公平,所以从1,我运行 sp_addlinkedsrvlogin'2' 它根据该文件说,它应当采用户证书的任何运行的查询的远程(即从1)和适用这些凭证,以2.这意味着,由于我连接至1使用Windows身份验证,这应该意味着我的窗户凭证适用于2。

现在异常消息改变:

登录失败,用户NT权力机构\匿名登录'.

有一派的这一例外时,我来到了什么有用,指出我在正确的方向。我是什么丢失?我希望[应该登录失败是在所有]的例外情况的参考 窗户证书, 匿名登录凭据。

它看起来像一旦我得到的链路本身的工作,分布式交易本身应是一个相当简单的事-文件意味着,我只是需要确保DTC服务上运行的1和任何运行的查询月1,将交易跨越的链接:

  • 包括 设置XACT_ABORT上 之前我的初始化分布式交易
  • 我用 开始分布式交易 而不是的 开始交易
  • 如果我谨引用非默认的实例SQL服务器上的2,我替换任何实例的名字 2 在我查询 [2\名称]

我的问题是这些:

  • 我怎么过去的这一登录的问题?的 sp_addlinkedsrvlogin 存储程序单独似乎并不是这样做的诀窍。
  • 是它的确如此简单运行的分布式交易的文件意味着?

TIA

有帮助吗?

解决方案

如果你在一个领域,然后设置应该是"可以使用登录名的当前安全环境",但还有一个步-你需要授予一个SPN到的每台服务器所涉及的交易。

假设你正在运行的SQL服务上的两台服务器作为一个域名用户(其中你需要为了使这一工作地系统不会这样做),这里有说明您将需要:

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

记住,用户将需要一个SPN两台服务器,但不是客户机-例如,如果你要从客户机->1->2,SQL服务帐户将需要一个SPN两1和2.

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

其他提示

假定这些服务器都在同一领域已经启用了可信的代表团能让你的服务器要通过全权证书针对性的服务器?你将拉起的活动目录的目的服务器,并走到代表团选项和选择"相信这个计算机为代表团指定的服务",然后进入SQL服务器的细节,服务器被允许通证书:

服务类型=MSSQLSvc
用户/用户的计算机=YourTargetServer.你的.域
Port=1433

可悲的是,很多这些类型的认证问题的链接的服务器要求重新启动全面生效(如果这些生产服务器也是难以解决在日)。

关于分布式交易-如果你最终得到的链接服务器的连接和运行正确,然后分发的交易工作的伟大。虽然接下来的事情,你可能会遇到一旦你得到它的工作是找到 巨大的缺陷 你不能使用任何形式的SCOPE_IDENTITY(),@@身份,等等。检索的主键的后插东西进入了一个链接的数据库。但是,这是另一个问题,有它自己的有趣的替代方法...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top