【问题标题】:Could not obtain information about Windows NT group user无法获得有关 Windows NT 组用户的信息
【发布时间】:2010-11-17 02:25:15
【问题描述】:

我正在使用脚本创建 SQL Server 复制。当我尝试执行时

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)).

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

如何调试?

【问题讨论】:

  • 我将工作属性中的所有者更改为“sa”,然后问题就解决了。
  • 嘿。你 7 年前问过这个问题,今天它仍在帮助像我这样的人。
  • 谁能告诉我为什么当工作或维护计划所有者在 AD 中并且 SQL 框上的管理员仍然会发生此错误?我总是必须恢复到 sa 帐户才能运行任何东西。

标签: sql sql-server replication sql-server-agent


【解决方案1】:

Active Directory 拒绝访问您的 SQL 代理。代理应在 STAR 域控制器识别的帐户下运行。

【讨论】:

  • @Remus Rusanu:代理正在本地计算机帐户下运行,如 MyWorkstation\SqlServerAccount
  • @Raj:其实既然是SQL Server本身在连接AD,你需要更改SQL运行的账户。它必须是 AD 将进行身份验证的帐户,例如域帐户或 NETWORK SERVICE 帐户(前提是机器已加入域)。 SSMS 或 EM 可以选择更改服务帐户。
  • +1 让我不必与我的 dba 交谈(节省了几个小时)
  • Brent Ozar 建议(当然要谨慎)SQL Server 代理作业由 SA 拥有,因为所有者对作业的运作方式并不重要,直到由于所有者被删除而失败或未经身份验证。见这里:brentozar.com/blitz/jobs-owned-by-user-accounts。服务帐户是次佳选择,只要您正确配置它并且永远不会面临被锁定或禁用的风险。
  • 我遇到了这个 SQL 代理错误,这是由于临时端口耗尽导致 SQL Server 连接无法发生。 SQL 代理错误伴随着在数据库服务器的系统事件日志中看到的间歇性 NETLOGON 和组策略错误。
【解决方案2】:

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

如果计算机名称从 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】:

    对我来说,作业在 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那。这些作业与复制清理有关,但我不确定它们是手动添加的还是作为复制设置的一部分添加的——我没有参与,所以我不确定。

    【讨论】:

      【解决方案4】:

      在我的情况下,我在尝试在 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
      

      明显更冗长,但它完成了工作。

      【讨论】:

        【解决方案5】:

        刚刚解决了这个问题。在我的情况下,它是域控制器不可访问,因为两个 dns 服务器都是 google dns。

        我只是添加到这个问题的清单中:

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

        【讨论】:

        • 我也是。必须更改 DNS 以指向域控制器,以便它可以验证域用户。
        【解决方案6】:

        我遇到了同样的问题,原来是由于运行 SQL 服务的域登录在 AD 中被锁定。锁定是由于密码错误将服务帐户用于其他目的的不相关使用。

        从 SQL 代理日志收到的错误没有提及服务帐户的名称,只是无法通过身份验证的用户(作业所有者)的名称(因为它使用服务帐户与 AD 进行检查)。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            在我们的例子中,运行 SQL Server 和 SQL 代理的 Windows 服务帐户在 Active Directory 中被锁定。

            【讨论】:

              【解决方案9】:

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

              查看您是否可以运行 Active Directory 用户和计算机 实用程序 (%SystemRoot%\system32\dsa.msc),并检查以确保您所依赖的帐户仍然存在。 p>

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-12-25
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多