SQL Linked Server 存在模拟和约束委派问题

问题描述 投票:0回答:1

我正在努力在 SQL2017 上设置 SQL 链接服务器,该服务器使用 Windows 域帐户和 Kerberos 约束委派进行模拟。

我的集群中有 4 个 SQL 节点,每个节点上有一个链接服务器(相同的配置),指向集群中的 AG 侦听器。我试图通过 SQL 代理让存储过程在每个 SQL 节点上运行,该代理连接到侦听器(通过链接服务器)以连接到数据库的主版本。

链接服务器正在使用 Microsoft OLE DB Provider for SQL Server 提供程序。链接服务器代码是:

EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'ListenerName.domain.co.uk,portnum', @provider=N'SQLNCLI', @datasrc=N'ListenerName.domain.co.uk,portnum'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'True',@locallogin=N'Domain\SQLProcUser',@rmtuser=NULL,@rmtpassword=NULL

如您所见,链接服务器设置为使用登录当前安全上下文来创建,除非使用“Domain\SQLProcUser”,因为它模拟了远程服务器上的该用户。

存储过程由非 SA 的 Windows 域帐户拥有并作为 Windows 域帐户运行。域帐户对其尝试连接的数据库拥有正确的权限(我们将此帐户称为 SQLProcUser)。这已经通过在本地针对数据库运行相同的 select 语句进行了测试。

我遵循 MS here 的指导来设置 Kerberos 约束委派。我们的场景符合文档中的场景 2。所有 SQL 节点 SQL 服务都在同一域用户下运行,作为同一集群的一部分(我们将其称为 SQLServiceUser)。

Active Directory 用户和计算机中的 SQLServiceUser 已设置为“仅信任此用户委派指定服务(仅使用 Kerberos)”,并且已为所有 SQL 节点 FQDN(加端口号)和侦听器添加 MSSQLSvc 服务FQDN(加上端口号)。 ‘账户敏感,无法委托’未勾选。

随着集群已启动并运行,所有 SPN 均已为 SQLServiceUser 注册。 在 SQLServiceUser 的 ADSI 中,属性 msDS-AllowedToDelegateTo 具有所有 SQL 节点和侦听器。

但是.. 每当我尝试在链接服务器上的任何 SQL 节点上运行存储过程或使用链接服务器执行为 login='Domain\SQLProcUser' 时,我都会收到以下错误:

Msg 7437, Level 16, State 1, Line 5
Linked servers cannot be used under impersonation without a mapping for the impersonated login.

令人气愤的是,模拟映射已经存在,委托已设置并且权限都已存在。 SQL 日志中没有消息,事件查看器也没有显示任何内容。

谷歌让我失望了,因为它只是在我已经完成的安全选项卡中设置模拟。 有人可以为我指明下一步应该尝试的正确方向以及如何排除/解决此问题吗?

sql-server linked-server kerberos-delegation
1个回答
0
投票

enter image description here

选择此选项时,您不需要为用户创建显式映射。确保委派 spns 设置正确,并且 AD 中的帐户可以被模拟。

© www.soinside.com 2019 - 2024. All rights reserved.