使用 Windows 身份验证的跨域 SQL Server 登录
Posted
技术标签:
【中文标题】使用 Windows 身份验证的跨域 SQL Server 登录【英文标题】:Cross Domain SQL Server Logins Using Windows Authentication 【发布时间】:2011-08-18 21:51:35 【问题描述】:我有一个使用 Windows 身份验证的 SQL Server 2005 命名实例,其中域组用作登录名。域结构如下:
Forest1 Forest2
/ \ |
Domain1 Domain2 Domain3
对象按以下域进行组织:
Forest1.Domain1
用户 全球组Forest1.Domain2
SQL Server 实例 域本地组(用作登录)Forest2.Domain3
用户 全球组我的所有用户都存在于Domain1
和Domain3
中,但SQL Server 框存在于Domain2
中。因此,我的登录名是Domain2
中的域组。当Domain1
中的用户添加到Domain2
中的域本地组并尝试使用 TCP/IP 协议连接到 SQL Server 实例时,他会收到以下错误消息:
无法连接到
。用户 'Domain1\userName' 登录失败。 (Microsoft SQL Server,错误:18456)
我尝试过的其他事情:
如果我将用户添加为登录 明确地说,他可以连接。
如果我添加一个 Domain1
全局组
用户作为登录名的成员
明确地说,他可以连接。
如果我添加一个 Domain1
全局组
用户是其中的成员
Domain2
域本地成员
组用作登录,他不能
连接。
编辑:如果我将Domain2
域本地组添加到托管SQL Server实例的Domain2
服务器上的降级桌面用户组,Domain1
用户可以成功连接到服务器 - 我也可以作为 Domain1
用户在本地连接到实例(只是不能远程)。
编辑:如果我将 Domain2
域本地组添加到本地服务器组并为该本地服务器组创建 SQL Server 登录,Domain1
用户仍然无法连接远程到实例。
编辑:如果我将连接网络协议更改为“命名管道”,Domain1
用户可以成功远程连接。
据我了解(参考这些 TechNet 文章:Group Scope 和 Nesting Groups),域组必须是域本地组才能包含来自 Domain1
和 Domain3
的用户。
如何使用 Windows 身份验证将域组用作 SQL Server 登录名,以便域组可以包含来自 Domain1
和 Domain3
的用户,并且用户可以通过 TCP/IP 远程连接?
更多注释
SQL Server 命名实例的服务帐户是Domain1
中的用户帐户
已为服务帐户添加 SPN(包括服务器名称和别名)
更新
将 SQL 服务实例服务帐户更改为 Domain2
似乎已经解决了这个问题。我会进一步调查并将我的发现发回!
【问题讨论】:
【参考方案1】:好的,我在 2017 年也遇到了这个问题,很难找到任何解决方案,最后,我只为我的情况解决了这个问题。
我的环境,
林 1(域 1)--- 信任 --- 林 2(域 2)
我在 Domain2 中有一个服务帐户,尝试使用 Windows 身份验证登录 Domain1 中的 SQL Server。
然后,会弹出以下错误消息。
登录失败。登录来自不受信任的域,不能用于 Windows 身份验证。 (Microsoft SQL Server,错误:18452)
解决方案很简单,在 domain1 上,打开活动目录域和信任工具,
信任 -> 传出信任 -> 属性 -> 身份验证 -> 更改为“森林范围的身份验证”
我的问题解决了。
【讨论】:
【参考方案2】:正如我在问题更新中提到的,将服务帐户更改为 Domain2
解决了该问题。那到底是怎么回事?
问题 - 解释
据我所知(也在 Microsoft 代表的帮助下),因为服务帐户最初是 Domain1
用户,所以当用户进行身份验证时,它无法确定连接用户是哪些域本地组的成员通过 Kerberos。这是 Kerberos 问题的主要线索是当我使用“命名管道”成功连接时,因为它使用 NTLM 身份验证。
整体解决方案
为了将这一切结合在一起,要成功地将来自Domain1
和Domain3
的用户添加为Domain2
中的组成员,以便可以将这些组用作具有Windows 身份验证的SQL Server 登录名,这里有一个要求列表(或至少强烈鼓励):
-
在域之间建立信任关系
-
至少必须设置 1 路信任,以便
Domain2
信任 Domain1
和 Domain3
Domain2
中的组必须在“域本地”范围内
-
这样您就可以从
Domain1
和Domain3
添加用户和组
请参阅here 了解更多信息
Domain2
用户指定为服务帐户标识
-
MSDN 记录了为什么可能首选使用域用户帐户
尽管配置管理器应该为您将用户添加到本地 SQL Server 2005 特定组(即 SQLServer2005MSSQLUser$MY_MACHINE$MY_INSTANCE),但我遇到了一些情况并非如此。因此,只需检查您的本地群组,以确保它们已使用您的
Domain2
用户帐户进行了适当更新。
虽然 SQL Server 设置应自动为其本地组分配适当的权限,但我再次遇到了一些情况并非如此。如果您遇到这种情况,您可以参考这篇MSDN 文章以及前面提到的文章以了解权限要求。
Domain2
服务帐户配置服务主体名称 (SPN)
-
客户端和服务器主机之间的相互身份验证需要 SPN
查看这篇TechNet 文章了解更多信息
Domain2
服务帐户以进行委派信任
-
查看这篇TechNet 文章了解更多信息
Domain2
组创建登录名,任何Domain1
或Domain3
成员都应该能够远程连接!
注意
与任何远程网络活动一样,请检查您的防火墙以确保您的 SQL Server 端口未被阻止。虽然默认端口是 1433,但请检查以确保您的端口是明文的。
【讨论】:
以上是关于使用 Windows 身份验证的跨域 SQL Server 登录的主要内容,如果未能解决你的问题,请参考以下文章