找不到Windows NT用户或组“DOMAIN \ USER”?

时间:2013-02-26 12:52:16

标签: sql-server active-directory

我正在尝试从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创建的用户?是否有任何明显的遗漏?

7 个答案:

答案 0 :(得分:4)

这只表示用户不在Administrator组中。如果您的问题与我的问题类似,您的Active Directory位于不同的虚拟机上,而您的SQL Server位于另一个虚拟机上。您已将Active Directory域加入SQL Server虚拟机,然后必须在SQL Server虚拟机上执行以下操作。

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

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

  3. 点击群组,您会看到右侧的群组列表 窗口的一栏。

  4. 双击管理员,会打开一个新窗口,您会发现链接的用户不在此处。

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

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

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

答案 1 :(得分:1)

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

如果您具有区分大小写的服务器排序规则,那么AD用户的情况将在完全正确的情况下指定。

您可以通过执行以下操作找到服务器排序规则:

select serverproperty('collation')

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

如果这些都不适用,请查看该帐户。它是禁用的,你可以用它登录等等。如果suser_sid()返回null,那么必然存在某种问题。

答案 2 :(得分:1)

我可以在Windows 7中向您提供我的建议,尽管它可能不相关。

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

在我最终解决之前,我一直在努力解决这个问题!

答案 3 :(得分:1)

我还遇到了以下用户的错误:

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

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

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

    SELECT name FROM syslogins WHERE sid = SUSER_SID ('YourDomain\YourLogin')
    
    它回来了 您的域\ OldLogin

    执行后 exec sp_revokelogin'YourDomain \ OldLogin'

    问题得到修复,sp_grantlogin现在可以正常运行。

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

答案 4 :(得分:1)

我有一个非常相似的案例,相同的错误代码15401,但在这种情况下,我正在做的是将域中的用户添加到我拥有SQL的服务器中的一个组中;所以然后只需将组添加到具有相同ROLE的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服务器中的角色分配更易于管理的用户数。

答案 5 :(得分:0)

如果您使用的是非英语语言,或者在您的计算机上使用过非英语语言,则可能需要 本地化 用户详细信息&#39 ;重新尝试使用。

E.g。瑞典机器上的[NT AUTHORITY\Network Service][NT INSTANS\Nätverkstjänst]

花了好几个小时试图找出为什么BUILTIN\NT AUTHORITY\<MachineName>\等没有效果。

答案 6 :(得分:0)

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

Domain\Abcdefghijklmnopqrstuvwxyz

成为

Domain\Abcdefghijklmnopqrst