我正在使用脚本创建SQL Server Replication。当我尝试执行
时 The job failed. Unable to determine if the owner (STAR\moorer7) of job L3BPT2M-Atlas-14 has server access (reason: Could not obtain information about Windows NT group/user 'STAR\moorer7', error code 0x5. [SQLSTATE 42000] (Error 15404)).
这是由定义复制的脚本创建的作业。
如何调试?
答案 0 :(得分:36)
Active Directory拒绝访问您的SQL代理。代理应该在STAR域控制器识别的帐户下运行。
答案 1 :(得分:8)
对我来说,这些作业在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
。之后工作完美无缺。这些作业与复制清理有关,但我不确定它们是手动添加还是作为复制设置的一部分添加 - 我没有参与其中,所以我不确定。
答案 2 :(得分:7)
我们在虚拟机的测试环境中遇到类似的错误。如果计算机名称因模板中的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.
我认为在这种情况下是正确的。我们在VM克隆/部署过程中添加了一个脚本,用于重新创建SQL登录。
答案 3 :(得分: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
明显更加冗长,但它完成了工作。
答案 4 :(得分:2)
刚刚解决了这个问题。在我的情况下,它是域控制器无法访问,因为两个DNS服务器都是谷歌DNS。
我只是添加到此问题的核对表中:
答案 5 :(得分:1)
我遇到了同样的问题,结果是由运行在AD中锁定的SQL服务的域登录引起的。锁定是由于服务帐户与其他用途密码错误无关而导致的。
从SQL代理日志收到的错误未提及服务帐户的名称,只提及无法进行身份验证的用户(作业所有者)的名称(因为它使用服务帐户检查AD)。
答案 6 :(得分:1)
我必须连接到VPN以获取发布脚本才能成功部署数据库。
答案 7 :(得分:0)
在我们的案例中,运行SQL Server和SQL Agent的Windows服务帐户被锁定在Active Directory中。
答案 8 :(得分:0)
我刚收到此错误,结果我的AD管理员删除了整个公司中每个SQL Server实例使用的服务帐户。谢天谢地,AD有自己的回收站。
查看是否可以运行 Active Directory用户和计算机实用程序(%SystemRoot%\ system32 \ dsa.msc),并检查以确保您依赖的帐户仍然存在。