我为 AD 组创建了一个登录名:
CREATE LOGIN [MYDOMAIN\Development Admins] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
该 AD 组的成员之一是名为 DBGuy 的用户。如果我执行,我可以在这个 AD 组中看到 DBGuy 用户
xp_logininfo 'MYDOMAIN\Development Admins', 'members'
但是,如果我尝试使用 DBGuy 帐户登录,则会收到错误消息:
错误号:18456
严重性:14
状态:1
行号:65536
在错误日志中我看到:
用户“MYDOMAIN\DBGuy”登录失败。原因:找不到与提供的名称匹配的登录名。[客户:192.168.50.127]
其他一些信息......
- 其他 AD 帐户在 Windows 登录时似乎工作正常,我只是对这个组有问题。
- 我发现 Aaron Bertrand 的一篇文章描述了有关连接中默认数据库的类似问题 - 我已在连接设置中将默认数据库设置为master。
- 一篇博文建议使用
exec sp_change_users_login Report
它来寻找孤儿用户;这为我返回零行。
这是一个旧线程,但当我遇到同样的问题时,它是谷歌上的第一个热门话题。
我的两分钱:在我的情况下,AD 组是一个分发组,而不是一个安全组,因此它不能用于授予对 SQL Server 的访问权限。
TLDR;确保用户在客户端建立连接的本地 Windows 机器上重新进行身份验证。
根据我的经验,当您连接到 SQL 时,SQL 似乎不会检查组成员身份,而是依赖连接客户端提供它们所属的安全组信息。如果本地客户端经过身份验证 - 在他们进入 AD 安全组之前登录 Windows,则新的组成员身份将丢失,并且登录将被拒绝。但是,如果用户在添加到 AD 时未登录其本地客户端,并且在添加到 AD 组后必须登录,则它会正常工作。
很明显,最初的 AD 小组“被灌输”了一些东西。我创建了第二个组,它与第一个组的定义基本相同,并验证了新组工作正常。然后我删除了原来的AD组。
我再也没有遇到过这个问题。如果我这样做,我肯定会在重新创建 AD 组之前尝试@AshburnRK 的解决方案,看看它是否有效。
我注意到类似的问题,安装后我被锁定在 SQL Server 之外。所以我启动了 SQL Server 2014,在单用户模式下使用 -m 选项并登录到服务器 SQL Management Studio。我验证了 AD 组配置正确但没有做任何修改。我注销了 SQL 服务器,并以 AD 组的成员身份再次尝试,这次我能够连接。
这是全新安装后第二次发生这种情况。起初我认为这是我的错,但现在我确信 SQL 服务器中有一些东西一开始没有提取 AD 信息。
我发帖这么晚。这可能是组类型权限问题。为了使 AD 的 SQL Server 组 Windows 身份验证正常工作,您需要执行以下步骤:
在 SQL Server Management Studio 中,您需要为组创建登录名才能访问服务器:
这将允许 AD 组正确登录。我已经用 AD 对一个新的 SQL Server 2017 实例进行了测试,对我来说效果很好。