我有几十个 SQL Server,有很多不同的版本。他们中的许多人每天凌晨2 点左右在 SQL Server 错误日志中都有错误。
Login failed for user 'TheDomain\SQLServerAgentServiceAccount'
有些人表明了这个原因:
Reason: Token-based server access validation failed with an infrastructure error.
Check for previous errors. [CLIENT: <local machine>]
Error: 18456, Severity: 14, State: 11.
其余显示:
Reason: Could not find a login matching the name provided. [CLIENT: <local machine>]
Error: 18456, Severity: 14, State: 5.
我们的网络团队在此时间范围内没有发现任何可疑情况。第二个原因是有道理的并且是正确的 - 服务帐户没有匹配的登录名。我不知道为什么会为服务帐户创建一个明确的帐户。
服务器每天在同一时间尝试做什么?没有代理作业、备份、维护计划或任何其他已知服务可以做任何事情。
使用扩展事件会话,我能够追踪问题并看到它来自 SQL Server 默认创建的用于清理策略管理记录的 syspolicy_purge_history 作业。第 3 步是“擦除 Phantom 系统健康记录”。这包含一个 PowerShell 脚本,该脚本尝试连接到机器上的其他实例,从而导致登录失败。这是一个已知错误,仅影响具有 1 个以上 SQL Server 实例的计算机。 https://connect.microsoft.com/SQLServer/feedback/details/606801/syspolicy-purge-history-job。因此,当您在一个实例上看到登录失败时,它们并不是该实例试图连接到自身,而是同一台机器上的另一个实例。
此处的链接进一步解释,下面的代码将更新作业步骤以仅连接到正在运行作业的实例。
https://www.codykonior.com/2015/05/31/login-errors-with-syspolicy-purge-history/
或者,将以下内容复制并粘贴到作业步骤中:
您没有提及您使用的是哪个版本的 SQL Server。以防万一。但是,Aaron Bertrand 有一个列表,您应该保留一个链接到:
这只是关于State 5的较长讨论的一个片段。因此,请阅读详细信息。