3

我的一个工作代理工作的时间表最近被禁用了,除了最后修改日期之外,是否有任何信息可以找到有关谁或什么禁用了工作时间表的信息?

4

2 回答 2

6

默认情况下,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;

您可以设置自己的服务器端跟踪、扩展事件会话、事件通知或审核,以确保您能够在将来审核此信息(或简单地限制整个团队搞乱工作的能力)。

于 2013-09-30T19:15:50.793 回答
4

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

-- 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 - 服务器或代理日志中有任何条目吗? 没有骰子

2 - 默认服务器端跟踪是否拾取事件? 没有骰子

3 - 我可以查看交易日志来找到此人吗?MSDB 使用简单的恢复模型。 没有骰子

4 - 运行状况检查(扩展事件)是否跟踪此信息。我对此表示怀疑,但想检查一下。 没有骰子

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

因此,经过几次谷歌搜索后,我认为您可以找到几个解决方案。

A - 在适当的系统表上创建触发器并保存审计信息。请参阅我的博客“如何审核和防止不需要的用户操作”。. 这是我在 SQL 星期六做的一个完整的演示。

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

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

祝你好运。

约翰

于 2013-09-30T19:42:31.027 回答