如何找出谁修改了SQL Server Agent作业?

时间:2016-05-19 23:24:37

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

我需要验证2周前谁改变了工作步骤,这可能吗? 我试过这个:

use msdb
go
select j.name, j.date_modified, l.loginname
from sysjobs j
inner join sys.syslogins l on j.owner_sid = l.sid

但仅显示该作业的所有者,而不是实际登录的人。 感谢

2 个答案:

答案 0 :(得分:0)

如果您使用的是SQL Server版本2008(非快速版)及更高版本,那么您可以在服务器级别启用AUDIT对象,我认为您应该能够在审核日志中找到您要查找的信息。

答案 1 :(得分:0)

答案是否定的。您无法找到过去发生的事情的任何日志。但如果您想再次处于不同的情况。这就是要做的事情。

- 创建服务器审核:

CREATE SERVER AUDIT [SqlAgentObjectAccess_Audit]
       TO APPLICATION_LOG
      WITH
        (QUEUE_DELAY = 1000
          ,ON_FAILURE = CONTINUE
    ,AUDIT_GUID = 'e1f7d882-b26e-4b70-bc03-87af197eb7de'
       )

- 现在启动服务器审核

ALTER SERVER AUDIT [SqlAgentObjectAccess_Audit] WITH (STATE = ON)

---现在您需要在MSDB中启用审核并说明要审核的事件

USE [msdb]
go 

    CREATE DATABASE AUDIT SPECIFICATION [SqlAgentObjectAccess_Audit_MSDB]
      FOR SERVER AUDIT [SqlAgentObjectAccess_Audit]
      ADD (EXECUTE ON OBJECT::[dbo].[sp_delete_job] BY [dbo]),
      ADD (EXECUTE ON OBJECT::[dbo].[sp_delete_job] BY   [SQLAgentUserRole]),
      ADD (EXECUTE ON OBJECT::[dbo].[sp_add_job] BY [dbo]),
       ADD (EXECUTE ON OBJECT::[dbo].[sp_add_job] BY [SQLAgentUserRole])
      WITH (STATE = ON)
GO

注意:
1.您甚至可以登录某个共享并每天将这些文件读入表格并发送电子邮件 2.您可以审核所有可用事件的列表HERE

参考文献:
https://blogs.msdn.microsoft.com/sqlagent/2011/02/21/auditing-sql-agent-job-creation-and-deletion/