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

2024-03-15

我正在尝试测试一个概念证明,即我可以在两个链接的 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 '服务器2'链接两个数据库,我尝试运行以下查询来测试该链接确实有效:

Select   *
From     Server2.Destination.dbo.Output

我返回以下异常:

由于不存在登录映射,对远程服务器的访问被拒绝。

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

现在异常消息变为:

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

在谷歌上搜索了这个异常后,我没有发现任何有用的东西可以为我指明正确的方向。我缺少什么?我希望[如果登录失败]引用异常myWindows 凭据,not匿名登录凭据。

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

  • Include 设置 XACT_ABORT 为开在初始化我的分布式事务之前
  • I use 开始分布式交易代替开始交易
  • 如果我希望引用 Server2 上 SQL Server 的非默认实例,我将替换该名称的任何实例Server2在我的查询中[服务器2\实例名称]

我的问题是:

  • 我该如何解决这个登录问题?这sp_addlinkedsrvlogin仅存储过程似乎并不能解决问题。
  • 运行分布式事务真的像文档所暗示的那么简单吗?

TIA


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置链接服务器之间的身份验证? 的相关文章

  • Hibernate save() 和事务回滚

    在休眠状态下 当我save 事务中的一个对象 然后我回滚它 保存的对象仍然保留在数据库中 这很奇怪 因为这个问题不会发生在update or delete 方法 只需用save 这是我正在使用的代码 DbEntity dbEntity ge
  • 在 Grails 下如何防止异常导致事务回滚?

    我的 Grails 服务遇到一个问题 即与事务无关的吞没异常会导致事务回滚 即使它与域对象的持久性无关 在我的服务中 我有一些类似的东西 updateSomething domainObj def oldFilename domainObj
  • 替换 Select 语句中的 NULL 和空字符串

    我有一个专栏可以有NULL或空白区域 即 值 我想用有效值替换这两个值 例如 UNKNOWN 我发现的各种解决方案建议修改表本身内的值 然而 在这种情况下 这不是一个选项 因为数据库用于开发和 或修补得非常差的第三方应用程序 实际上 我认为
  • 如何查询最近7天的总计?

    我正在使用 SQL Server 2008 我想编写一个查询来提供给定天数的总活动量 具体来说 我想统计过去 7 天每天的总票数 我的桌子看起来像这样 VoteID VoteDate Vote BikeID 1 2012 01 01 08
  • SQL Proc 从 varchar 到 int 的“转换失败”。为什么要转换?

    我的问题是 为什么它从 varchar 转换为 int 我不确定它想做什么 CREATE PROCEDURE myTestProcedure TransId VARCHAR 15 AS BEGIN DECLARE Result VARCHA
  • 数据库函数 VS Case 语句

    昨天我们遇到了一个场景 必须获取 a 的类型db field在此基础上我们必须编写该字段的描述 喜欢 Select Case DB Type When I Then Intermediate When P Then Pending Else
  • 如何在sql中查询xml列

    我在 SQL Server 2008 上有一个表 T1 其中包含一个 XML 列 EventXML 我想查询某个节点包含特定值的所有行 更好的是 我想检索不同节点中的值 表T1 T1 EventID int EventTime dateti
  • 触发器以捕获服务器中的架构更改

    是否可以实现类似以下触发器的东西 CREATE TRIGGER tr AU ddl All Server ON DATABASE WITH EXECUTE AS self FOR DDL DATABASE LEVEL EVENTS AS D
  • 单个 sql 查询可以处理 sql server 中的 null 或值日期范围

    使用 SQL Server 2008 我有一个存储过程 其中开始日期和结束日期作为日期范围的输入参数 寻找一个singlesql 查询 其中在 where 子句中有一个开始日期和结束日期 可以处理日期均为空或都有值的两种情况 我不想使用 I
  • SQL Server 2005 - 达到表行大小限制

    有没有一种干净的方法可以在向表添加新列之前确定表的行大小 并且不超过 8060 字节的限制 例如 如果表行长度当前为 8055 字节 并且我想添加日期时间 8 字节 则这将结束 因为它将变为 8063 字节 不包括空映射 但是 如果我添加一
  • 如何将 T-SQL 中的结果连接到列中?

    我正在处理一个查询 它应该给我这样的结果 Name Surname Language Date James Hetfield en gb fr 2011 01 01 Lars Ulrich gb fr ca 2011 01 01 但我的选择
  • 带回调或异步/等待的节点 postgres 事务?

    我正在运行 Node 7 6 0 它支持 async await node postgres 客户端池支持 async await 并且有一个很好的示例here https github com brianc node pg pool pl
  • SQL 查询Where Column = '' 返回表情符号字符

    好的 我有一个包含三列的表 Id Key Value 我想删除所有行Value是空的 因此 我在删除之前编写了要选择的查询 Select from Imaging ImageTag where Value 到目前为止一切都很标准 现在这是奇
  • 字符串文字上的 SQL Server T-SQL N 前缀[重复]

    这个问题在这里已经有答案了 这可能是一个菜鸟问题 但我发现了一些 T SQL 查询示例来验证数据库大小SELECT and WHERE clause here http technet microsoft com en us library
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • 更新列的脚本

    表名 公民 Firstname Lastname Telephone1 Many other columns John Smith 03907625212 Andrew Evans 0807452132 Bill Towny 0590712
  • SQL中的三元运算符? “传递给 LEFT 或 SUBSTRING 函数的长度参数无效”

    抱歉这个误导性的话题 我不知道如何更好地表达 因为我主要是一名软件开发人员 所以我想到了三元运算符并解决了以下问题 我需要找到通过可为空的外键链接两个表的最可靠的方法 modModel and tabSparePart 两者之间唯一的相似之
  • SQL Server 中的嵌套事务

    sql server 允许嵌套事务吗 如果是的话那么交易的优先级是什么 来自 SQL Server 上的 MSDN 文档 嵌套交易 http msdn microsoft com en us library ms189336 SQL 90
  • 如何连接子查询的第一行?

    我有一个发票表和一个按键关联的相关数据的子表 特别是 对于每张发票 我只对子表中的第一个相关行感兴趣 鉴于我想要每个发票键都有一个相关行 我该如何实现这一点 Select i Invoice Number c Carrier Name Fr
  • 错误:不支持的 PIVOT 列类型:文本

    我正在尝试执行 PIVOT 但出现错误 我正在尝试查看哪些患者接受了多次间隔治疗 该列是文本类型 我尝试在查询中将列类型转换为 VARCHAR MAX 但仍然收到错误 这是我的代码 SELECT patientname IntervalNa

随机推荐