如何通过服务控制识别谁或什么正在重新启动 SQL 服务?

Mat*_*DBA 5 sql-server windows

我调查了一个经历意外重启的实例,并遇到了通常的服务控制事件,但没有与之关联的用户登录。是否仍然有可能是授权用户启动了重新启动,还是由于 Windows 发出了命令?如果是授权用户,在 SQL 错误日志和事件日志之外,我可以在哪里尝试识别用户?

Log Name: System Source: Service Control Manager Date: 12/24/2014 9:02:24 AM Event ID: 7036 Task Category: None Level: Information Keywords: Classic User: N/A Computer: XXX Description: The SQL Server Agent (MSSQLSERVER) service entered the stopped state.

RLF*_*RLF 3

如果您正在运行默认跟踪,并且您应该运行它,它可能可以帮助您了解发生了什么。默认跟踪是轻量级的,除其他外,它还跟踪服务器停止和服务器启动。请参阅 Feodor Georgiev 的文章:

\n\n

https://www.simple-talk.com/sql/performance/the-default-trace-in-sql-server---the-power-of-performance-and-security-auditing/

\n\n

跟踪日志在繁忙的服务器上回收得相当快,因此您需要在服务器停止和服务器启动后尽快检查。在安全审核事件标题的底部,有 \xe2\x80\x98Audit Server Starts and Stops\xe2\x80\x99 的代码。(仅稍微调整以包括跟踪日志的默认计数。)

\n\n
SELECT  TE.name AS [EventName] ,\n        v.subclass_name ,\n        T.DatabaseName ,\n        t.DatabaseID ,\n        t.NTDomainName ,\n        t.ApplicationName ,\n        t.LoginName ,\n        t.SPID ,\n        t.StartTime ,\n        t.SessionLoginName\nFROM    sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1\n                                                              f.[value]\n                                                      FROM    sys.fn_trace_getinfo(NULL) f\n                                                      WHERE   f.property = 2\n                                                    )), 4) T  -- 4 is the default number of trace log files\n        JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id\n        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id\n                                            AND v.subclass_value = t.EventSubClass\nWHERE   te.name IN ( \'Audit Server Starts and Stops\' )\n
Run Code Online (Sandbox Code Playgroud)\n