无法获取关于Windows NT组用户的信息。

43

我正在使用脚本创建SQL Server复制。当我尝试执行时,出现以下错误:

作业失败。无法确定作业L3BPT2M-Atlas-14的所有者(STAR\moorer7)是否具有服务器访问权限(原因: 无法获取关于Windows NT组/用户“STAR\moorer7”的信息,错误代码为0x5。[SQLSTATE 42000](错误15404))。

这是由定义复制的脚本创建的作业。

我该如何调试?


3
我将作业属性中的所有者更改为“sa”,然后问题得到了解决。 - SeeSharp
3
呵呵,你在七年前提出这个问题,现在仍能帮助像我这样的人。我很感激。 - PowerUser
1
有人能告诉我为什么当作业或维护计划所有者在AD中并且SQL框上的管理员时,为什么仍会出现此错误?我总是不得不回退到sa帐户才能使任何东西运行。 - Tug Strongly
9个回答

36

Active Directory 拒绝访问您的 SQL Agent。代理应该在一个被 STAR 域控制器认可的帐户下运行。


1
@Remus Rusanu:代理正在以本地机器帐户MyWorkstation\SqlServerAccount运行。 - Raj More
9
@Raj:实际上,由于 SQL Server 本身正在连接到 AD,因此您需要更改 SQL 正在运行的帐户。它必须是 AD 将认证的帐户,例如域帐户或 NETWORK SERVICE 帐户(前提是该计算机已加入域)。SSMS 或 EM 可以有更改服务帐户的选项。 - Remus Rusanu
2
+1 让我省去了与我的数据库管理员交流的时间(节省了几个小时) - DancesWithBamboo
2
Brent Ozar建议(当然要小心)将SQL Server代理作业的所有者设置为SA,因为所有者对作业的功能并不重要,直到由于所有者被删除或未经身份验证而导致作业失败。请参见此处:http://www.brentozar.com/blitz/jobs-owned-by-user-accounts/。服务帐户是下一个最好的选择,只要您正确配置它并且它永远不会面临被锁定或禁用的风险。 - NateJ
1
我曾经遇到过 SQL Agent 错误,这是由于短暂端口耗尽导致 SQL Server 连接无法发生。SQL Agent 错误伴随着数据库服务器系统事件日志中出现的间歇性 NETLOGON 和 Group Policy 错误。 - jl.
显示剩余2条评论

10

对我来说,这些作业在 DOMAIN\Administrator 用户下运行,但出现错误信息 "The job failed. Unable to determine if the owner (DOMAIN\administrator) of job Agent history clean up: distribution has server access (reason: Could not obtain information about Windows NT group/user 'DOMAIN\administrator', error code 0x5. [SQLSTATE 42000] (Error 15404)). 为了解决这个问题,我将每个失败的作业所有者更改为 sa之后完美解决。这些作业涉及复制清理,但我不确定它们是手动添加还是作为复制设置的一部分添加-因为我没有参与其中,所以我不确定。


9

我们在虚拟机的测试环境中遇到了类似的错误。如果由于从模板进行VM克隆而导致机器名称更改,您可能会遇到此错误。

如果计算机名称从OLD更改为NEW。

一个作业使用这个存储过程:

msdb.dbo.sp_sqlagent_has_server_access @login_name = 'OLD\Administrator'

使用这个:

EXECUTE master.dbo.xp_logininfo 'OLD\Administrator'

这导致了SQL错误15404。
select text from sys.messages where message_id = 15404;
Could not obtain information about Windows NT group/user '%ls', error code %#lx.

我想,在这种情况下,这是正确的。 我们向虚拟机克隆/部署过程添加了一个脚本,重新创建SQL登录。

3
在我的情况下,我在尝试在SQL Server 2008 R2上使用IS_ROLEMEMBER()函数时遇到了此错误。该函数在SQL Server 2012之前是无效的。因此,我最终使用了其他方法。
select 1 
from sys.database_principals u 
inner join sys.database_role_members ur 
    on u.principal_id = ur.member_principal_id 
inner join sys.database_principals r 
    on ur.role_principal_id = r.principal_id 
where r.name = @role_name 
and u.name = @username

虽然有点啰嗦,但这样做可以完成任务。


3

我刚刚解决了这个问题。在我的情况下,它是由于域控制器不可访问,因为两个 DNS 服务器都是 Google DNS 导致的。

我将以下检查项目添加到此问题的清单中:

  • 检查域控制器是否可访问

我也是。不得不更改DNS以指向域控制器,以便验证域用户。 - Mark Berry

1
我必须连接到 VPN 才能成功将发布脚本部署到数据库。

1
在我们的情况下,SQL Server和SQL Agent运行的Windows服务帐户在Active Directory中被锁定了。

1
我遇到了同样的问题,原因是运行SQL服务的域登录帐户在AD中被锁定。锁定是由于将服务帐户用于其他目的并使用错误密码而导致的。SQL代理日志收到的错误没有提到服务帐户的名称,只是无法验证的用户(作业所有者)的名称(因为它使用服务帐户与AD进行检查)。

0

我刚刚遇到了这个错误,结果发现我的AD管理员删除了整个公司中每个SQL Server实例使用的服务帐户。谢天谢地,AD有自己的回收站。

请尝试运行Active Directory用户和计算机实用程序(%SystemRoot%\ system32 \ dsa.msc),并检查您所依赖的帐户是否仍然存在。


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