禁用SA账户后SQL Server 2019出现DOMAIN\MACHINENAME$登录失败报错咨询
问题原因
你遇到的18470登录失败报错核心逻辑如下:
- 报错中的
DOMAIN\MACHINENAME$是SQL Server所在服务器的计算机域账户,所有以本地系统权限运行的进程访问本地SQL服务时,未显式指定账号的情况下会默认使用该计算机账户发起认证。 - 启用SA账户后报错消失的原因是:发起登录请求的进程在计算机账户认证失败后,会自动尝试用内置SA账户做兜底登录,SA启用后兜底认证成功,因此不会产生失败日志,并非该请求本身直接调用SA账户。
- 常见的触发进程包括:内部部署的SQL监控/备份工具、SQL Server Agent未配置权限的作业、服务器内置的健康检查任务、合规扫描进程等。
保留SA禁用状态的解决方案
- 定位触发请求的进程
执行以下SQL查询定位发起登录的程序:
也可以开启SQL Server的登录审计功能,记录所有失败登录的上下文信息,精准定位触发来源。SELECT program_name, host_process_id, login_time FROM sys.dm_exec_sessions WHERE login_name = 'DOMAIN\MACHINENAME$' - 合法进程的权限配置
如果确认触发进程是合规的运维进程,直接给DOMAIN\MACHINENAME$授予该进程所需的最小权限即可,不需要启用SA账户。 - 非必要进程处理
如果确认进程不需要访问SQL服务,直接禁用对应进程或者调整进程的配置,取消访问SQL的逻辑即可。 - 临时日志过滤方案
如果确认该登录请求无实际业务影响,仅需要避免日志刷屏,可以执行以下命令关闭18470错误的日志记录:
*注意:该操作会屏蔽所有18470错误的日志,可能会漏掉真实的恶意登录失败记录,生产环境不建议优先使用。EXEC sp_altermessage 18470, 'WITH_LOG', 'false'; GO
内容的提问来源于stack exchange,提问作者bulat makhmutov
相关产品推荐
相关产品推荐

