我有一个使用Windows身份验证的SQL Server 2005命名实例,其中域组用作登录。域结构如下:
Forest1 Forest2
/ \ |
Domain1 Domain2 Domain3
对象在以下域中进行组织:
Forest1.Domain1
Forest1.Domain2
Forest2.Domain3
我的所有用户都存在于Domain1
和Domain3
中,但SQL Server框存在于Domain2
中。因此,我的登录信息是Domain2
中的域组。当Domain1
中的用户被添加到Domain2
中的域本地组并尝试使用TCP / IP协议连接到SQL Server实例时,他会收到以下错误消息:
无法连接到< instance>。用户'Domain1 \ userName'登录失败。 (Microsoft SQL Server,错误:18456)
我尝试过的其他事情:
如果我将用户添加为登录名 显然,他可以连接。
如果我添加Domain1
全局组
用户是登录的成员
显然,他可以连接。
如果我添加Domain1
全局组
用户所属的成员
Domain2
域本地成员
用作登录的组,他不能
连接。
编辑:如果我将Domain2
域本地组添加到托管SQL Server实例的Domain2
服务器上的Demote Desktop Users组,则{{ 1}}用户可以成功连接到服务器 - 我也可以作为Domain1
用户本地连接到实例(不是远程)。
编辑:如果我将Domain1
域本地组添加到本地服务器组并为该本地服务器组创建SQL Server登录,Domain2
用户仍然无法远程连接到实例。
编辑:如果我将连接网络协议更改为“命名管道”,则Domain1
用户可以成功远程连接。
根据我的理解(引用这些TechNet文章:Group Scope和Nesting Groups),域组必须是域本地组才能包含来自Domain1
和{{{}的用户1}}。
如何使用Windows身份验证将域组用作SQL Server登录,以便域组可以包含Domain1
和Domain3
的用户,并且用户可以通过TCP / IP远程连接?< / p>
更多说明
Domain1
更新
将SQL Service实例服务帐户更改为Domain3
似乎已解决了该问题。我会进一步调查并回复我的发现!
答案 0 :(得分:16)
正如我的问题更新中所述,将服务帐户更改为Domain2
可以解决问题。那是怎么回事?
问题 - 解释
据我所知(也得到Microsoft代表的帮助),因为服务帐户最初是Domain1
用户,所以当用户无法确定连接用户所属的域本地组时通过Kerberos进行身份验证。这是Kerberos问题的主要原因是当我使用“命名管道”成功连接时,因为它使用NTLM身份验证。
整体解决方案
要将所有内容整合在一起,要成功添加Domain1
和Domain3
中的用户作为Domain2
中的群组成员,以便这些群组可以用作Windows身份验证的SQL Server登录,这是一份要求清单(或者至少是强烈鼓励的):
Domain2
信任Domain1
和Domain3
Domain2
中的群组必须为“域本地”范围
Domain1
和Domain3
Domain2
用户指定为服务帐户标识
Domain2
服务帐户配置服务主体名称(SPN)
Domain2
服务帐户以进行委派
Domain2
群组创建登录信息,任何Domain1
或Domain3
成员都应该可以远程连接!注意强>
与任何远程网络活动一样,请检查防火墙以确保未阻止SQL Server端口。虽然默认端口是1433,但请检查以确保您的端口处于清除状态。
答案 1 :(得分:1)
好的,我在2017年遇到了这个问题,很难找到任何解决方案,最后,我只是根据我的情况来解决这个问题。
我的环境,
Forest 1(Domain1)--- TRUST --- Forest 2(Domain2)
我在Domain2中有一个服务帐户,尝试使用Windows身份验证登录Domain1中的SQL Server。
并弹出以下错误消息。
登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用。 (Microsoft SQL Server,错误:18452)
解决方案很简单,在domain1上,打开活动目录域和信任工具
信托 - &gt;传出信托 - &gt;属性 - &gt;身份验证 - &gt;更改为“森林范围的身份验证”
我的问题解决了。