【发布时间】:2010-09-26 11:50:00
【问题描述】:
SQL Server 2005 中是否有一种内置方法可以审计特别是删除存储过程之类的事情?有可以查询的历史记录表吗?我们有一个神秘的 sproc,现在已经消失了几次。
【问题讨论】:
标签: sql-server sql-server-2005 audit auditing ddl-trigger
SQL Server 2005 中是否有一种内置方法可以审计特别是删除存储过程之类的事情?有可以查询的历史记录表吗?我们有一个神秘的 sproc,现在已经消失了几次。
【问题讨论】:
标签: sql-server sql-server-2005 audit auditing ddl-trigger
您可以使用 DDL 触发器构建它:
【讨论】:
仅当您使用DDL triggers 或使用分析器跟踪文本“%DROP%PROC%procname%”时
【讨论】:
请注意,在 SQL Server 2008 中,他们现在还具有 AUDIT 来替换 Profiler Traces 以进行审计活动。类似但有自己的配置UI和查看结果的UI
【讨论】:
您可以设置探查器跟踪以捕获审核架构对象管理事件并根据您关心的数据库名称进行过滤。每当创建、删除、编辑架构中的对象时,它都会在分析器中触发一个事件,其中包括进行更改的人员和存储过程的名称。
您至少需要以下分析器列: ApplicationName - 进行更改时正在运行的应用程序用户的名称 DatabaseName - 包含已更改对象的数据库 EventSubClass - 动作类型显示改变、修改、删除、创建等 LoginName - 进行更改的用户 ObjectName - 受影响的对象
【讨论】:
[较晚的一个,但添加了有关如何在审计系统实施之前查看谁进行了更改的详细信息]
其他人已经介绍了可以开始审计数据以监控未来变化的不同方式,但如果您最初没有任何审计系统,那么很难找出历史上谁做了什么以及什么时候做了什么。
假设数据库处于完全恢复模式,唯一的选择是尝试读取事务日志。问题是默认情况下不支持此功能。选项是:
有关详细信息,请参阅这些主题:
How to view transaction log in SQL Server 2008
【讨论】:
我同意。它可以是带有过滤器的 SQL Server 分析器。 DDL 触发器存在于 SQL Server 中。 你可以创建这样的东西:
CREATE TRIGGER ddl_drop_procedure
ON DATABASE
FOR DROP_PROCEDURE
AS
RAISERROR ('You deleted a stored procedure',10, 1)
GO
另一种选择是使用第三方工具,例如来自 codeplex 的 Auto Audit 或 apexSQL 触发器。
【讨论】: