bit*_*ise 26 sql-server sql-server-2005 windows-authentication cross-domain
我有一个使用Windows身份验证的SQL Server 2005命名实例,其中域组用作登录.域结构如下:
Forest1 Forest2
/ \ |
Domain1 Domain2 Domain3
Run Code Online (Sandbox Code Playgroud)
对象在以下域中组织:
Forest1.Domain1
Forest1.Domain2
Forest2.Domain3
我的所有用户都存在Domain1,Domain3但SQL Server框中存在Domain2.因此,我的登录名是域组Domain2.当用户in Domain1添加到域本地组Domain2并尝试使用TCP/IP协议连接到SQL Server实例时,他收到以下错误消息:
无法连接到<instance>.用户'Domain1\userName'登录失败.(Microsoft SQL Server,错误:18456)
我试过的其他事情:
如果我明确地将用户添加为登录,他可以连接.
如果我Domain1明确地添加用户作为成员的全局组,则可以连接.
如果我添加一个Domain1用户所属的Domain2全局组作为用作登录的域本地组的成员,则无法连接.
编辑:如果我将Domain2域本地组添加到Domain2托管SQL Server实例的服务器上的Demote Desktop Users组,Domain1用户可以成功连接到服务器 - 我也可以作为Domain1用户本地连接到该实例(只是不远程).
编辑:如果我将Domain2域本地组添加到本地服务器组并为该本地服务器组创建SQL Server登录,则Domain1用户仍然无法远程连接到该实例.
编辑:如果我将连接网络协议更改为"命名管道",则Domain1用户可以成功远程连接.
根据我的理解(参考这些TechNet文章:组范围和嵌套组),域组必须是域本地组,以便包括来自Domain1和的用户Domain3.
如何使用Windows身份验证将域组用作SQL Server登录,以便域组可以包含来自两者的用户Domain1,Domain3并且用户可以通过TCP/IP远程连接?
更多说明
Domain1UPDATE
更改SQL Service实例服务帐户Domain2似乎已解决该问题.我会进一步调查并回复我的发现!
bit*_*ise 16
正如我的问题更新中所述,更改服务帐户以Domain2解决问题.那是怎么回事?
问题 - 解释
从我可以告诉(也与微软代表的帮助),因为该服务帐户最初是一个Domain1用户,它无法确定连接的用户是什么域本地组,当用户通过Kerberos验证的成员.这是Kerberos问题的主要原因是当我使用"命名管道"成功连接时,因为它使用NTLM身份验证.
总体解决方案
把它放在一起,成功地从添加用户Domain1,并Domain3作为团体成员Domain2,使各组可以作为使用Windows身份验证SQL Server登录,这里的需求列表(或至少是强烈建议):
Domain2信任Domain1和Domain3Domain2必须是"域本地"的范围
Domain1和Domain3Domain2用户指定为服务帐户标识
Domain2服务帐户
配置服务主体名称(SPN)Domain2服务帐户以进行委派
Domain2组创建登录,任何Domain1或Domain3成员都应该能够远程连接!注意
与任何远程网络活动一样,检查防火墙以确保不阻止SQL Server端口.虽然默认端口是1433,但请检查以确保您的端口处于清除状态.