【问题标题】:Windows NT user or group 'DOMAIN\USER' not found?未找到 Windows NT 用户或组 'DOMAIN\USER'?
【发布时间】:2013-02-26 12:52:16
【问题描述】:

我正在尝试从 Active Directory 组在 SQL 服务器上创建用户,因为我正在使用的应用程序本身不支持 Windows 身份验证,并且依赖于在 SQL 服务器上创建的个人登录,因为应用程序级别权限在应用程序而不是使用 SQL 角色。因此,要访问应用程序的每个用户都需要针对应用程序数据库所在的 SQL 实例创建自己的用户,以便随后可以在应用程序中为用户分配单独的权限。

我正在使用以下命令从我们指定的 Active Directory 组中读取用户列表;

exec master..xp_logininfo 'domain\groupname', 'members'

这将返回类似于以下内容的输出;

account name    type  privilege  mapped login name  permission path
DOMAIN\USER     user  user       DOMAIN\USER        DOMAIN\GROUPNAME

在大多数情况下,此列表中返回的用户可以在 SQL 实例上创建,不会有任何戏剧性。我首先使用sp_grantlogin 将用户创建为SQL 帐户,然后继续允许每个新登录访问应用程序数据库。但是,有少数用户被报告为不存在。由于运行sp_grantlogin,我收到以下错误;

Msg 15401, Level 11, State 1, Procedure sp_grantlogin, Line 49
Windows NT user or group 'DOMAIN\USER' not found. Check the name again.

显然在上面的错误信息中,我已经删除了实际的用户名。为什么xp_logininfo 会返回一个不能用sp_grantlogin 创建的用户?我有什么明显的遗漏吗?

【问题讨论】:

  • 用户肯定存在于 AD 中,suser_sid 重复的可能性未知,因为 select suser_sid('DOMAIN\USER') 返回 NULL,域控制器可用(我假设) '能够针对它运行 xp_logininfo,并且我使用的情况与我尝试创建用户时从 xp_logininfo 返回的情况相同...

标签: sql-server active-directory


【解决方案1】:

这只是表示用户不在管理员组中。如果您的问题就像我的问题一样,您的 Active Directory 在不同的虚拟机上,而您的 SQL Server 在另一个虚拟机上。并且您已将 Active Directory 域加入您的 SQL Server 虚拟机,那么您必须在您的 SQL Server 虚拟机上执行以下操作。

  1. 导航到工具 --> 计算机管理

  2. 窗口打开,展开系统工具 --> 本地用户和组

  3. 点击群组,您应该会在右侧看到群组列表 窗口的列。

  4. 双击Administrator,会打开一个新窗口,您会注意到链接的用户不在此处。

  5. 点击添加,新窗口打开。在这里,在位置下,您可以选择更改 您的域的位置。

  6. 点击高级,将打开登录提示,只需使用您的管理员虚拟机帐户登录即可。

  7. 点击立即查找,所有字段保持原样。从显示的用户列表中,双击从 Active Directory 导入的用户,然后单击确定

【讨论】:

    【解决方案2】:

    在使用sp_grantlogin之前是否更改了登录名的大小写?

    如果您有区分大小写的服务器排序规则,那么 AD 用户的大小写需要以完全正确的大小写来指定。

    您可以通过以下方式找到服务器排序规则:

    select serverproperty('collation')
    

    如果您确实有区分大小写的服务器排序规则,并且您没有弄乱大小写,则可能与 xp_logininfo 返回的内容与 AD 中的实际大小写不匹配。在这种情况下,请尝试使用案例的变体创建用户。

    如果这些都不适用,请查看帐户。是不是被禁用了,能不能用它登录等等。如果suser_sid()返回null,那么一定是有什么问题。

    【讨论】:

    • 不,实际登录名被设置到一个变量中,然后使用该变量调用 sp_grantlogin,当我手动测试该过程时,我复制并粘贴。我运行它的环境中的 SQL 排序规则不区分大小写。 xp_logininfo 报告的用户名大小写与 Active Directory 中显示的用户名大小写匹配
    • 帐号是否被禁用?您是否尝试过使用该帐户登录?
    • 帐户处于活动状态 - 我自己无法以帐户身份登录该帐户,但用户 n 问题可以登录并且每天都会这样做
    【解决方案3】:

    我可以就在 Windows 7 中执行此操作向您提供建议,尽管它可能不相关。

    我遇到的问题是我在 Windows UI 中重命名了用户帐户。该名称在 Windows 中正确显示,我使用新名称登录。但在幕后,它仍然使用 SQL Server 正在寻找的旧名称。

    在我最终解决之前,我为此苦苦挣扎了好几个小时!!

    【讨论】:

      【解决方案4】:

      我也遇到过这样的用户错误,他们是:

      1. 在 AD 中创建
      2. 授予了一些 SQL 权限
      3. 在 AD 中重命名

      然后我尝试将这个新的、重命名的用户帐户名添加到同一服务器/数据库,出现错误消息 15401,级别 11,状态 1,过程 sp_grantlogin,第 49 行。

      我已按照http://support.microsoft.com/kb/324321/en-us 中的步骤操作,此命令在重命名之前返回旧用户帐户名:

      SELECT name FROM syslogins WHERE sid = SUSER_SID ('YourDomain\YourLogin')
      

      它返回了 您的域\旧登录名

      执行后 exec sp_revokelogin 'YourDomain\OldLogin'

      问题已解决,sp_grantlogin 现在可以正常工作了。

      PS 作为另一种测试方法,我建议从另一台服务器远程运行 sp_grantlogin。它可能会成功。

      【讨论】:

        【解决方案5】:

        我有一个非常相似的情况,相同的错误代码 15401,但在这种情况下,我所做的是将域中的用户添加到我有 SQL 的服务器中的组中;因此,只需将该组添加到具有相同角色的 SQL 引擎即可。

        USE [master]
        GO
        CREATE LOGIN [localhost\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
        Msg 15401, Level 16, State 1, Line 3
        Windows NT user or group 'localhost\Administrators' not found. Check the name again.
        

        然后在链接PRB: Use BUILTIN\Group to Grant Access to Predefined Windows NT Groups

        我发现了问题,所以解决方法是:

        USE [master]
        GO
        CREATE LOGIN [BUILTIN\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
        GO
        ALTER SERVER ROLE [sysadmin] ADD MEMBER [BUILTIN\Administrators]
        GO
        Command(s) completed successfully.
        

        我相信这对于减少登录帐户的数量非常有用,并且可以为 SQL 服务器中的角色分配更易于管理的用户数量。

        【讨论】:

          【解决方案6】:

          如果您使用非英语语言,或一直在您的计算机上使用一种语言,您可能需要本地化您尝试的用户详细信息使用。

          例如瑞典机器上的[NT AUTHORITY\Network Service][NT INSTANS\Nätverkstjänst]

          花了几个小时试图弄清楚为什么 BUILTIN\NT AUTHORITY\<MachineName>\ 等不起作用。

          【讨论】:

          • 你能把它们用英语放在哪里?
          【解决方案7】:

          我的问题是登录的长度。在Domain\User 语法中,Windows 使用所谓的pre-Windows 2000 语法。该语法将用户名的长度限制为 20 个字符。您必须将用户名截断为前 20 个字符,然后它应该可以工作,如下所示:

          Domain\Abcdefghijklmnopqrstuvwxyz
          

          变成

          Domain\Abcdefghijklmnopqrst
          

          【讨论】:

            猜你喜欢
            • 2011-03-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-01
            • 1970-01-01
            • 2021-08-11
            • 1970-01-01
            • 2023-03-16
            • 1970-01-01
            相关资源
            最近更新 更多