使用Windows身份验证的跨域SQL Server登录

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

  • SQL Server实例
  • 域本地组(用作登录)

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远程连接?

更多说明

  • SQL Server命名实例的服务帐户是一个用户帐户 Domain1
  • 已为服务帐户添加SPN(包括服务器名称和别名)

UPDATE

更改SQL Service实例服务帐户Domain2似乎已解决该问题.我会进一步调查并回复我的发现!

bit*_*ise 16

正如我的问题更新中所述,更改服务帐户以Domain2解决问题.那是怎么回事?

问题 - 解释

从我可以告诉(也与微软代表的帮助),因为该服务帐户最初是一个Domain1用户,它无法确定连接的用户是什么域本地组,当用户通过Kerberos验证的成员.这是Kerberos问题的主要原因是当我使用"命名管道"成功连接时,因为它使用NTLM身份验证.

总体解决方案

把它放在一起,成功地从添加用户Domain1,并Domain3作为团体成员Domain2,使各组可以作为使用Windows身份验证SQL Server登录,这里的需求列表(或至少是强烈建议):

  1. 建立域之间的信任关系
    1. 至少,必须设置单向信任,以便Domain2信任Domain1Domain3
  2. 组中的Domain2必须是"域本地"的范围
    1. 这样,您可以添加用户和组Domain1Domain3
    2. 有关详细信息,请参见此处
  3. 使用SQL Server配置管理器将非管理Domain2用户指定为服务帐户标识
    1. MSDN文档可能首选使用域用户帐户的原因
    2. 即使配置管理器应该为您添加用户到本地SQL Server 2005特定组(即SQLServer2005MSSQLUser $ MY_MACHINE $ MY_INSTANCE),我遇到了一些情况并非如此.因此,只需检查您当地的群组,确保他们已使用您的Domain2用户帐户进行了适当的更新.
    3. 虽然SQL Server设置应该自动为其本地组分配适当的权限,但我再遇到一些情况并非如此.如果您遇到这种情况,可以参考此MSDN文章以及前面提到的权限要求文章.
  4. 为SQL Server实例主机(包括任何别名)和Domain2服务帐户 配置服务主体名称(SPN)
    1. 客户端和服务器主机之间的相互身份验证需要SPN
    2. 有关详细信息,请参阅此TechNet文章
  5. 根据您打算如何使用模拟,您可能希望启用Domain2服务帐户以进行委派
    1. 有关详细信息,请参阅此TechNet文章
  6. 为SQL Service实例启用远程连接
  7. 最后,为所需的Domain2组创建登录,任何Domain1Domain3成员都应该能够远程连接!

注意

与任何远程网络活动一样,检查防火墙以确保不阻止SQL Server端口.虽然默认端口是1433,但请检查以确保您的端口处于清除状态.