Windows NT用户或组'DOMAIN\USER'未找到?

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


http://support.microsoft.com/kb/324321/en-us - David Brabant
用户在AD中肯定存在,suser_sid可能重复的潜在风险未知,因为选择suser_sid('DOMAIN\USER')返回NULL,域控制器可用(我假设),因为我能够对其运行xp_logininfo,并且当我尝试创建用户时,我使用与xp_logininfo返回的相同大小写。 - user1451185
7个回答

2
我遇到了一个非常类似的情况,同样的错误代码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: 使用BUILTIN\Group授予预定义的Windows NT组访问权限 中,我找到了问题,解决方法如下:

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服务器中分配角色的用户数量更易于管理。

2
这意味着用户不在管理员组中。如果您的问题与我的类似,其中您的Active Directory位于另一个虚拟机上,而SQL Server位于另一个虚拟机上。并且您已将Active Directory域加入到SQL Server虚拟机中,则必须在SQL Server虚拟机上执行以下操作。
  1. 导航到 工具 --> 计算机管理

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

  3. 单击 ,您应该会看到窗口右侧列出了一系列组。

  4. 双击 管理员,新窗口打开,您会注意到链接的用户不在其中。

  5. 单击 添加,新窗口打开。在此处,您可以选择更改域的位置。

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

  7. 单击 查找,所有字段都保持不变。从呈现的用户列表中,双击从Active Directory导入的用户,然后单击 确定


1
我也曾为用户遇到过这个错误,他们的情况如下:
  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')

执行后返回了 YourDomain\OldLogin。

执行 exec sp_revokelogin 'YourDomain\OldLogin' 后问题得到解决,现在 sp_grantlogin 正常工作。

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


1

虽然可能不相关,但我可以给你在Windows 7上执行此操作的建议。

我的问题是我已经在Windows UI中重命名了用户帐户。名称在Windows中显示正确,并且我使用新名称登录。但幕后仍在使用旧名称,这就是SQL Server正在寻找的内容。

我为此苦苦挣扎了几个小时,最终终于解决了!


1

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

如果您的服务器区分大小写,则需要精确指定 AD 用户的大小写。

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

select serverproperty('collation')

如果您的服务器排序规则区分大小写,并且您没有更改大小写,那么 xp_logininfo 返回的内容可能与 AD 中实际情况不匹配。在这种情况下,请尝试使用大小写变化创建用户。
如果上述情况都不适用,请查看帐户。它是否已禁用,您能否使用它登录等。如果 suser_sid() 返回 null,则必须存在某种问题。

不,实际的登录名被设置为一个变量,然后调用sp_grantlogin与该变量一起使用。当我手动测试该过程时,我会复制和粘贴。我运行此过程的环境中的SQL排序规则是不区分大小写的。xp_logininfo报告的用户名的大小写与在Active Directory中呈现的用户名的大小写相匹配。 - user1451185
账户是否已被禁用?您是否尝试使用该账户登录? - muhmud
账户已激活 - 我自己无法使用该账户登录,但是该用户可以每天登录并使用。 - user1451185

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

Domain\Abcdefghijklmnopqrstuvwxyz

变成

Domain\Abcdefghijklmnopqrst

0

如果您使用的是非英语语言,或者在您的计算机上使用了非英语语言,您可能需要对您正在尝试使用的用户详细信息进行本地化

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

花费数小时来弄清为什么 BUILTIN\NT AUTHORITY\<MachineName>\ 等不起作用。


你能把它们翻译成英语吗? - mesteves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接