相关疑难解决方法(0)

如何使用 Windows 身份验证使链接服务器正常工作?

我正在尝试在域环境中使用“使用登录名的当前安全上下文制作”将链接服务器连接到在另一台服务器上创建的 ServerA,即 ServerB。我读到我需要为在每台服务器上运行 SQL Server 的服务帐户创建 SPN 才能启用 Kerberos。我已经这样做了,现在两者都显示身份验证方案是 Kerberos,但是,我仍然面临错误:

"Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'".
Run Code Online (Sandbox Code Playgroud)

在 Active Directory 中,我可以看到 ServerB 的服务帐户被信任用于委派 MSSQLSvc,但我注意到 ServerA 的服务帐户尚未启用“信任此用户进行委派”。目标服务器是否也需要启用该选项?要能够使用当前的 Windows 登录名来使用链接服务器,还需要什么吗?

sql-server-2008 authentication sql-server linked-server kerberos

25
推荐指数
1
解决办法
9万
查看次数

对于每个 SQL 实例,我的 SPN 条目应该是什么样的?

我发现有关如何准确格式化 SPN(服务原则名称)以获得正确的 Kerberos 连接以及每个 SQL 实例需要多少个的矛盾信息。

此 2017 年 MS 文档包含以下内容:

从 SQL Server 2008 开始,SPN 格式已更改,以支持 TCP/IP、命名管道和共享内存上的 Kerberos 身份验证。命名实例和默认实例支持的 SPN 格式如下。

  • 命名实例: MSSQLSvc/FQDN:[port|instancename]
  • 默认实例: MSSQLSvc/FQDN:port|MSSQLSvc/FQDN

新的 SPN 格式不需要端口号。这意味着多端口服务器或不使用端口号的协议可以使用 Kerberos 身份验证。

我认为最后一段的意思是我只需要一个条目,以下之一:

  • 命名实例: MSSQLSvc/sqlbox1.mydomain.org/instance2
  • 默认实例: MSSQLSvc/sqlbox1.mydomain.org

这似乎与这个较旧的 (2011) MS 文档相矛盾,不仅是关于端口号,还关于使用什么名称:

要创建 SPN,您可以使用 SQL Server 的 NetBIOS 名称或完全限定域名 (FQDN)。但是,您必须为 NetBIOS 名称和 FQDN 创建一个 SPN

当我查看环境中已经存在的 SPN 时,我看到了各种各样的组合,有些服务器最多有 4 个条目:

  • MSSQLSvc/sqlbox1
  • MSSQLSvc/sqlbox1:1433
  • MSSQLSvc/sqlbox1.mydomain.org
  • MSSQLSvc/sqlbox1.mydomain.org:1433

甚至MS 自己的 Kerberos 配置管理器似乎也想生成最后两个版本(使用适当的混淆处理):

在此处输入图片说明

同样,对于现有的命名实例,我看到了一个奇怪的组合,其中一些几乎肯定是无效的:

  • MSSQLSvc/sqlbox1:1522
  • MSSQLSvc/sqlbox1:instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522
  • MSSQLSvc/sqlbox1.mydomain.org:instance2
  • MSSQLSvc/sqlbox1.mydomain.org/instance2 …

sql-server kerberos spn

10
推荐指数
1
解决办法
2万
查看次数

链接服务器连接开始失败,并出现“无法生成 SSPI 上下文... SQL Server 网络接口:登录尝试失败”错误?

问题

我在同一个域中有两个 SQL Server 2016 标准版服务器。ServerA有两个链接服务器连接设置到ServerB

第一个链接服务器连接使用专用的远程SQL 登录安全上下文。那个一直是并且仍然工作正常。

第二个连接使用“登录的当前安全上下文”,它是ServerA 上的Windows 身份验证 (AD) 登录。直到今天,这也运行良好。

今天突然间,连接到 ServerA 然后尝试运行使用第二个链接服务器连接的查询的每个人最终都会遇到以下错误:

链接服务器“LinkedServerName”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法生成 SSPI 上下文”。消息 -2146893044,级别 16,状态 1,第 0 行 SQL Server 网络接口:登录尝试失败

此外,用户目前可以直接连接到 ServerA 和 ServerB,甚至可以直接对 ServerB 上的对象执行查询,但是当他们尝试通过 ServerA 上的链接服务器运行引用 ServerB 上相同对象的查询时,这是唯一一次他们得到上述错误,目前。


相关信息

这是我们目前看到的SPN和日志(抱歉所有混淆):

ServerB 成功的 SPN 注册 SQL 日志:

ServerA SQL 日志

ServerB 成功的 SPN 注册 SQL 日志:

ServerB SQL 日志

  • 请注意,两台服务器都为自己的端口 1433 和未指定端口成功注册了 SPN。

ServerA 注册的 SPN:

ServerA 注册的 SPN

  • 我不确定第二个“CN=”行(倒数第二行)是什么,但它的字面意思是“CN=ServerASvc”,但这不是 SQL 服务帐户的名称。SQL 服务帐户是“SQLServiceAccount1”。
  • 我也不确定为什么最后一行只有服务器名称“ServerA”的 SPN(我们的 DC 中确实有一个 Host/CName),但对于前面的一行来说似乎是多余的。 …

sql-server linked-server errors sql-server-2016 logon

9
推荐指数
2
解决办法
657
查看次数