获取sql作业代理作业的最后修改用户

时间:2013-09-30 18:53:50

标签: sql-server sql-server-2008

我的某个职位代理人职位的日程安排最近被禁用,无论如何,除了上次修改日期之外,还有哪些信息可以找到关于谁或什么禁用工作时间表的信息?

2 个答案:

答案 0 :(得分:3)

默认情况下,SQL Server不会审核此信息,因此不会,事后您将无法使用此数据。 (我检查了默认跟踪,似乎没有在那里记录。)如果您从那以后没有重新启用该作业,您可以将msdb.dbo.sysjobs.modified_date中的值与 已记录,但我不知道您可能确定哪些其他事件属于与修改作业的用户相同的用户。同样,如果作业尚未被修改(或者您在修复之前知道它何时被修改),并且假设更改发生在仍在当前滚动窗口内的默认跟踪的时间范围内,您可以检查其他活动大约在同一时间:

DECLARE @ModifiedDate DATETIME;
SET @ModifiedDate = -- plug in the value here

DECLARE @path NVARCHAR(260);

SELECT @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces WHERE is_default = 1;

SELECT * FROM sys.fn_trace_gettable(@path, DEFAULT)
  WHERE EndTime >= DATEADD(MINUTE, -30, @ModifiedDate)
    AND EndTime <  DATEADD(MINUTE,  30, @ModifiedDate)
  ORDER BY EndTime DESC;

您可以设置自己的服务器端跟踪,扩展事件会话,事件通知或审核,以确保您将来能够审核此信息(或者只是限制整个团队处理作业的能力) )。

答案 1 :(得分:2)

最简单的部分是查找最近被禁用的作业和/或计划。

-- Use msdb
use msdb
go

-- Jobs that have been recently disabled
select
  [name], [enabled], [date_created], [date_modified]
from sysjobs
where [date_modified] > '2013-09-30' and enabled = 0
order by [date_modified] desc
go


-- Schedules that have been recently disabled
select
  [name], [enabled], [date_created], [date_modified]
from sysschedules
where [date_modified] > '2013-09-30' and enabled = 0
order by [date_modified] desc
go

除非用户或系统管理员取得了这份工作的所有权,否则很难找到是谁做的。

我想到但没有奏效的事情如下:

1 - 服务器或代理日志中的任何条目? NO DICE

2 - 默认服务器端跟踪是否接收事件? NO DICE

3 - 我可以查看交易记录以查找此人吗? MSDB使用简单的恢复模型。 NO DICE

4 - 运行状况检查(扩展事件)是否跟踪此信息。我怀疑,但想检查。 NO DICE

5 - 由于这不是错误,因此在Windows事件中不会记录任何内容。 NO DICE

因此,经过几次谷歌搜索,我认为你可以解决几个问题。

A - 在相应的系统表上创建触发器并保存审核信息。 在'How to audit and prevent unwanted user actions.'上查看我的博客。这是我在SQL Saturdays上做的全面演讲。

B - 创建http://www.bimonkey.com/2009/12/sql-server-2008-auditing/审核规范,但您必须阅读输出文件。

C - 添加服务器端跟踪或扩展事件以捕获数据。

祝你好运。

约翰