sin*_*rtb 3 sql-server sql-server-2008
我的一个工作代理工作的时间表最近被禁用了,除了上次修改日期之外,还有什么信息可以找到禁用工作时间表的人或什么吗?
默认情况下,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;
Run Code Online (Sandbox Code Playgroud)
您可以设置自己的服务器端跟踪、扩展事件会话、事件通知或审计,以确保您能够在未来审计这些信息(或者只是限制整个团队处理工作的能力)。
最简单的部分是找到最近被禁用的工作和/或时间表。
-- 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
Run Code Online (Sandbox Code Playgroud)
除非用户或系统管理员拥有该工作的所有权,否则很难找出是谁干的。
我想到但没有实现的事情如下。
1 - 服务器或代理日志中有任何条目吗? 没有骰子
2 - 默认服务器端跟踪是否拾取该事件? 没有骰子
3 - 我可以查看交易日志来找到此人吗?MSDB 使用简单的恢复模型。 没有骰子
4 - 运行状况检查(扩展事件)是否跟踪此信息。我对此表示怀疑,但想检查一下。 没有骰子
5 - 由于这不是错误,因此 Windows 事件中不会记录任何内容。 没有骰子
因此,经过几次谷歌搜索后,我认为你已经找到了几个解决方案。
A - 在适当的系统表上创建触发器并保存审核信息。请参阅我的博客“如何审核和防止不需要的用户操作”。。这是我在 SQL Saturdays 上做的一个完整的演示。
B - 创建http://www.bimonkey.com/2009/12/sql-server-2008-auditing/审核规范,但您必须读取输出文件。
C - 添加服务器端跟踪或扩展事件以捕获数据。
祝你好运。
约翰