gpt4 book ai didi

sql-server - 使用 Windows 身份验证跨域 SQL Server 登录

转载 作者:行者123 更新时间:2023-12-01 22:13:05 26 4
gpt4 key购买 nike

我有一个使用 Windows 身份验证的 SQL Server 2005 命名实例,并使用域组作为登录名。域结构如下:

      Forest1                Forest2
/ \ |
Domain1 Domain2 Domain3

对象按以下域进行组织:

森林1.域1

  • 用户
  • 全局群组

森林1.域2

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

Forest2.Domain3

  • 用户
  • 全局群组

我的所有用户都存在于 Domain1Domain3 中,但 SQL Server 框存在于 Domain2 中。因此,我的登录是 Domain2 中的域组。当 Domain1 中的用户添加到 Domain2 中的域本地组并尝试使用 TCP/IP 协议(protocol)连接到 SQL Server 实例时,他会收到以下错误消息:

Cannot connect to <instance>. Login failed for user 'Domain1\userName'. (Microsoft SQL Server, Error: 18456)

我尝试过的其他事情:

  • 如果我将用户添加为登录名明确地,他可以连接。

  • 如果我添加 Domain1 全局组用户作为登录成员(member)明确地,他可以连接。

  • 如果我添加 Domain1 全局组该用户是其中的成员Domain2 域本地成员组用作登录,他不能连接。

  • 编辑:如果我将 Domain2 域本地组添加到托管 SQL Server 实例的 Domain2 服务器上的降级桌面用户组,Domain1 用户可以成功连接到服务器 - I还可以以 Domain1 用户身份本地连接到实例(只是不是远程)。

  • 编辑:如果我将 Domain2 域本地组添加到本地服务器组并为该本地服务器组创建 SQL Server 登录名,Domain1 用户仍然无法远程连接到实例.

  • 编辑:如果我将连接网络协议(protocol)更改为“命名管道”,Domain1 用户可以成功远程连接。

<小时/>

据我了解(引用这些 TechNet 文章: Group ScopeNesting Groups ),域组必须是域本地组才能包含来自 Domain1Domain3 的用户。

如何使用 Windows 身份验证将域组用作 SQL Server 登录名,以便域组可以包含来自 Domain1Domain3 的用户,并且用户可以通过 TCP/IP 进行远程连接?

更多注释

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

更新

将 SQL 服务实例服务帐户更改为 Domain2 似乎已经解决了该问题。我将进一步调查并发回我的发现!

最佳答案

正如我的问题更新中提到的,将服务帐户更改为 Domain2 解决了该问题。那么到底发生了什么?

问题 - 解释

据我所知(也在 Microsoft 代表的帮助下),由于服务帐户最初是 Domain1 用户,因此无法确定连接用户属于哪个域本地组当用户通过 Kerberos 进行身份验证时。这是 Kerberos 问题的主要线索是当我使用“命名管道”成功连接时,因为它使用 NTLM 身份验证。

整体解决方案

为了将所有内容整合在一起,成功将 Domain1Domain3 中的用户添加为 Domain2 中群组的成员,以便群组可以用作具有 Windows 身份验证的 SQL Server 登录名,以下是要求列表(或至少强烈鼓励):

  1. 在域之间建立信任关系
    1. 必须至少设置单向信任,以便 Domain2 信任 Domain1Domain3
  2. Domain2 中的组的范围必须为“本地域”
    1. 这样您就可以添加来自 Domain1Domain3 的用户和组
    2. 参见here了解更多信息
  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 服务实例启用远程连接
  7. 最后,为所需的 Domain2 组创建登录名,任何 Domain1Domain3 成员都应该能够远程连接!

注意

与任何远程网络事件一样,请检查您的防火墙以确保您的 SQL Server 端口未被阻止。尽管默认端口是 1433,但请检查以确保您的端口畅通无阻。

关于sql-server - 使用 Windows 身份验证跨域 SQL Server 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com