标签: kerberos

如何使用 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万
查看次数

证书链由不受信任的机构颁发

前段时间我在 Windows 10 家庭版环境(准确地说是笔记本电脑)上安装了 SQL Server 2016 开发者版,一切都很好。

然后有人——盒子的管理员——决定在没有告诉我的情况下重命名盒子。

之后,当尝试连接到 SQL 服务器时,我们遇到了以下错误消息:

在此处输入图片说明

在此处输入图片说明

这是一个与此非常相似的问题:

从 Azure 网站连接 VM 角色中的 DB 时,“证书链由不受信任的机构颁发”

我也去过这里:

目标主体名称不正确。无法生成 SSPI 上下文。(Microsoft SQL Server,错误:0)

我一直在使用 Kerberos 配置管理器,它给了我不同的错误消息

在此处输入图片说明

我应该说 我能够通过 SQL 服务器身份验证连接到这个 SQL 服务器实例,但我想使用 Windows 身份验证进行连接。

只是要清楚 - 这都是本地机器,不属于任何域。

我不太确定如何从这里开始,我想要的是使用 Windows 身份验证。

与证书相关的错误信息让我想到这里重新颁发证书。我不确定如何完成这项工作,或者这是否是解决这种情况的有效方法。

我今天不会在这台机器附近,但我会尽快赶上。如果时间允许,我会继续我的研究。

authentication sql-server kerberos sql-server-2016 certificate

20
推荐指数
2
解决办法
7万
查看次数

为什么要在 SQL Server 2012 中使用托管服务帐户而不是虚拟帐户?

在SQL Server 2012中,服务帐户创建为虚拟账户(VAS),如所描述这里,而不是托管服务帐户(MSAS)。

根据描述,我可以看到这些重要的区别:

  • MSA 是域帐户,VA 是本地帐户
  • MSA 使用 AD 处理的自动密码管理,VA 没有密码
  • 在 Kerberos 上下文中,MSA 会自动注册 SPN,而 VA 不会

还有其他区别吗?如果不使用 Kerberos,为什么 DBA 会更喜欢 MSA?

更新另一位用户在有关 VA 的 MS 文档中注意到了一个可能的矛盾

虚拟账户是自动管理的,虚拟账户可以在域环境中访问网络。

相对

虚拟帐户无法在远程位置进行身份验证。所有虚拟账户都使用机器账户的权限。以 格式提供机器帐户 <domain_name>\<computer_name>$

什么是“机器账号”?它如何/何时/为什么被“配置”?“在域环境中访问网络”和“在[域环境中]对远程位置进行身份验证”之间有什么区别?

sql-server windows sql-server-2012 kerberos password

14
推荐指数
1
解决办法
4781
查看次数

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

Kerberos 身份验证不适用于 SQL Server 2012 中的链接服务器

我正在使用 2 个在 Windows Server 2012 上运行 SQL Server 2012 的 SQL Server 设置 DEV/TEST 环境。我们正在从 Windows Server 2008 上的 SQL Server 2005 迁移,在那里我们已经正确启动并运行。

在 SQL Server 2012 中,Kerberos 身份验证不起作用。

每个服务器都有自己的 Active Directory 帐户,该帐户具有通过 Active Directory 用户和计算机授予的“写入服务主体名称”和“读取服务主体名称”权限。每当我连接到 SQL Server 2005 服务器并运行:

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

我懂了:

net_transport    auth_scheme
TCP              KERBEROS 
Run Code Online (Sandbox Code Playgroud)

当我对新的 SQL Server 2012 实例执行相同的查询时,我看到:

net_transport    auth_scheme
TCP              NTLM 
Run Code Online (Sandbox Code Playgroud)

如果我SetSPN -Q MSSQLSvc/*用来查询服务主体名称的活动域,我会看到列出的 2005 和 2012 服务器,除了服务器名称之外,其他方式完全相同。

例如:

MSSQLSvc/SERVERa2005.domain.inet
MSSQLSvc/SERVERa2005domain.inet:1433
MSSQLSvc/SERVERb2005.domain.inet
MSSQLSvc/SERVERb2005domain.inet:1433
MSSQLSvc/SERVERa2012.domain.inet
MSSQLSvc/SERVERa2012domain.inet:1433 …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server sql-server-2012 kerberos

8
推荐指数
1
解决办法
6397
查看次数

间歇性 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
查看次数

什么是森林?

我正在阅读 Microsoft 文章如何解决“无法生成 SSPI 上下文”错误消息

这两句话暗示,如果我知道域是什么,我应该知道森林是什么,但我不知道。我用谷歌搜索了一下,我发现的所有东西要么不相关(“只见树木不见森林”),要么没有解释该术语。

将 SPN 视为服务器资源中某个实例的域或林唯一标识符。

——

3.检查服务器所属的域和您用来连接的域帐户是否在同一个林中。这是 SSPI 工作所必需的。

sql-server kerberos

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

如何停止在链接服务器中使用 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
查看次数

在 SQL 集群上设置 SPN

我有一个关于如何手动设置 SPN 以在 SQL 集群上使用 Kerberos 身份验证的问题。

我是在集群名称上设置一个 SPN 还是在每个节点上设置一个? 在此处输入图片说明

我还有一个默认的命名实例,我是否指定实例的名称?

sql-server kerberos spn sql-server-2014

4
推荐指数
1
解决办法
3420
查看次数

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。原因:基于令牌的服务器访问验证失败

正如标题所述,我在尝试使用 ASP.NET webapp 时收到以下错误:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: 192.168.x.x]

这是来自 SQL 服务器上的“应用程序”日志。我目前有一个集群设置(使用 Microsoft 故障转移集群),尽管第二个节点尚未配置。我试过配置 SPN:

setspn -L myserviceaccount

Registered ServicePrincipalNames for <DN>:
        MSSQLSvc/*SQL.corp.*.local:1433
        MSSQLSvc/*SQL.corp.*.local
Run Code Online (Sandbox Code Playgroud)

事实上,SQL Server 确实根据其日志正确注册了它:

Message The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/my.sql.fqdn ] for the SQL Server service.

但是,查询SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;返回NTLM而不是 …

authentication sql-server-2008-r2 kerberos

3
推荐指数
1
解决办法
4万
查看次数

在 ConnectionStrings 中为每个应用程序使用 DNS

最近,当我不得不将大量内部应用程序迁移到新的 SQL 服务器时,我遇到了一个想法。我看的越多,它听起来就越完美,但我想向社区征求反馈意见。它使用 SQL0216 和 AlwaysOn。

告诉我的开发人员使用 DNS 条目在他们的 ConnectionStrings 中指向他们各自的数据库有什么缺点?

示例:DNS:App1_SQL 指向 Servr1,DNS:App2_SQL 指向 Servr1。服务器=App1_SQL;数据库=App1;Trusted_Connection=True;服务器=App2_SQL;数据库=App2;Trusted_Connection=True;

这样,当我迁移数据库时,我可以一次完成一个应用程序,确保在继续之前一切正常。无需重新编译代码,也无需处理任何配置文件。我只需要复制数据库并更新应用程序的 DNS 条目。

如果特定应用程序使用外部数据库引用,我会训练我的开发人员始终使用同义词。这样,我为旧数据库创建了一个链接服务器,并在迁移时相应地更新同义词。

除了必须一个一个地管理大量 DNS 条目之外,我仍然认为这是一种减轻与数据库迁移相关的压力的方法,能够通过小块而不是整个服务器一次性完成。

现在,我看不到的警告是什么?因为这听起来太容易和有益,而不是一个非常标准化的做法,但我从来没有遇到过这个建议。Kerberos 会成为问题吗?

提前致谢

sql-server dns availability-groups kerberos sql-server-2016

3
推荐指数
1
解决办法
109
查看次数

链接的 SQL Server

我正在尝试链接 2 个 SQL Server(2008 和 2005)。我已经通过 GUI 和脚本尝试过它,但没有运气。我在尝试通过访问进行查询时遇到问题。由于我不是网络管理员,我正在努力研究如何在这方面取得成功,但我总是收到一条消息,告诉我用户“../匿名登录”不允许连接。

经过一些研究,我相信这是一个与 Kerberos 相关的问题,它没有将我的凭据传输到我尝试链接的机器上。我正在使用 NT 身份验证,我无法使用/创建 SQL 身份验证登录。

我已经给我的网络管理员发送了一封邮件,看看我们是否能够在这里使用 Kerberos 委派。

找出我的配置发生了什么以及为什么这不起作用的后续步骤是什么?

提前致谢,因为这是我的第一个问题,大家好!

sql-server-2005 sql-server-2008 distributed-databases kerberos

0
推荐指数
1
解决办法
79
查看次数