相关疑难解决方法(0)

对于每个 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万
查看次数

间歇性 SQL 委托身份验证错误

这是一个奇怪的问题,导致我失去了所有的头发。

每隔几天左右,我们从一台 SQL 服务器到另一台的委派身份验证就会失败并显示以下错误:

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。SQL 服务器日志显示:“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。原因:找不到与提供的名称匹配的登录名。[客户端:10.1.xx] 错误:18456,严重性:14,状态:5。 ”

我们的环境由 6 个域控制器组成,从 Windows 2012 到 Windows 2019,SQL 服务器是运行 SQL Server 2017 的 Windows Server 2016。

几个小时后,问题会自行消失,除非在任一受影响的 SQL 服务器上清除 Kerberos 票证,这会在大约 15 分钟内解决问题。

起初我们认为这是特定 SQL 服务器的问题,因此我们更换了它,但是在去年它影响了具有多个不同委派连接的几台服务器。

迄今为止,我们已尝试更新 SQL 服务器、删除和重新创建 SPN、将我们的大部分 DC 升级到 Windows 2019、更新域功能级别和多个 Microsoft 票证。我们怀疑将 SSMS 会话留在 SQL Server 过夜会触发 Kerberos 委派连接更频繁地失败,但这在这一点上可能是迷信。

有任何想法吗?它在 80% 的时间内都有效,这使得追捕变得特别棘手。域控制器似乎正常同步,但我不确定在 DC 出现问题的情况下要查找什么。

奇怪的是,我们能够在中断期间通过受保护的 AD 帐户连接到各个服务器,并且登录被列为 Kerberos,只是 AD 委派的权限停止工作。

我们在周末进行 DC 维护,问题似乎随时都会出现。

sql-server kerberos windows-server active-directory

6
推荐指数
1
解决办法
440
查看次数

如何停止在链接服务器中使用 sql server 登录凭据?

我有一个位于意大利的链接服务器,server_italia它连接到位于美国俄勒冈州的服务器ORDB1

我们在不同但受信任的域上

从连接server_italiaORDB1通过链接服务器使用具有登录和所要求的权限的SQL Server的帐户进行ORDB1

我是一个sysadmin甚至domain admin在我的域中,而我的server_italia但我只sysadmin在 .sql server 中ORDB1

有一个类似的问题:

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

但它没有提供the答案。

这是我的链接服务器:

在此处输入图片说明

当我运行以下查询时,server_italia我得到以下结果:

SELECT [the_server]=@@servername,
auth_scheme 
FROM sys.dm_exec_connections WHERE session_id = @@spid ;  


SELECT net_transport, auth_scheme   
FROM sys.dm_exec_connections   
WHERE session_id = @@SPID; 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在俄勒冈州,我得到了这个:

在此处输入图片说明

如果我的美国同事得到:

  1. 为您的服务帐户运行的服务注册服务主体名称

  2. 在他们的服务器上设置 Kerberos 身份验证

  3. 配置约束委派,因为这将允许传递凭据,否则您可能仍会遇到双跳问题。– 在John Eisbrener的评论中添加

我可以在linked …

sql-server linked-server logins kerberos connectivity

5
推荐指数
1
解决办法
509
查看次数