`
sjk2013
  • 浏览: 2166627 次
文章分类
社区版块
存档分类
最新评论

使用SQLServer Audit来监控触发器的启用、禁用情况

 
阅读更多

使用情景:

有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的。但是有时候却是因为一些触发器被禁用了。

由于SQLServer默认不跟踪触发器的启用还是禁用。且禁用触发器的命令(Disable Trigger)不在默认跟踪里面捕获。但是可以在服务器级别的跟踪(不是使用Profiler)获取这些信息,捕获SQL:StmtCompleted并在TextData列筛选,但是对于负载较重的系统,这样会有比较大的影响。

如果你的是企业版,可以考虑使用一个新特性:SQL Server Audit。可以使用DATABASE AUDIT SPECIFICATION来捕获这些事件。

使用步骤:

第一步,使用以下语句先创建服务器级别监控:

USE master;

GO

CREATE SERVER AUDIT ServerAudit

  TO FILE (FILEPATH = 'E:\temp\', MAXSIZE = 1 GB)--注意更改文件路径

  WITH (ON_FAILURE = CONTINUE);

GO

ALTER SERVER AUDIT ServerAudit

  WITH (STATE = ON);

注意,路径需要修改,temp文件夹也要实现开启。

第二步,创建数据库级别监控:

对于本文,我们关注SCHEMA_OBJECT_CHANGE_GROUP,以AdventureWorks为例子:

USE AdventureWorks;
GO
CREATE DATABASE AUDIT SPECIFICATION schema_change
FOR SERVER AUDIT ServerAudit
ADD (SCHEMA_OBJECT_CHANGE_GROUP)
WITH (STATE = ON);
GO


第三步,创建一个示例表,然后创建一个示例触发器:

CREATE TABLE dbo.splunge ( id INT ) ;
GO
CREATE TRIGGER dbo.splunge_trigger ON dbo.splunge
    FOR INSERT
AS
    BEGIN
        SELECT  1 ;
    END
GO


第四步,可以使用以下脚本来检查:

SELECT  event_time ,
        succeeded ,
        server_principal_name ,
        [object_name] ,
        [statement]
FROM    sys.fn_get_audit_file('E:\Temp\ServerAudit*', NULL, NULL)
WHERE   database_name = 'AdventureWorks' ;


结果如下,可以看到捕获了创建的记录:

现在来禁用这个触发器,然后再查询一下:

DISABLE TRIGGER dbo.splunge_trigger ON dbo.splunge;
GO
SELECT  event_time ,
        succeeded ,
        server_principal_name ,
        [object_name] ,
        [statement]
FROM    sys.fn_get_audit_file('E:\Temp\ServerAudit*', NULL, NULL)
WHERE   database_name = 'AdventureWorks' ;

结果如下:


如果你重新启用这个触发器,你会再看到另外一行,如果觉得返回数据太多,可以在where语句中添加筛选:

AND [statement] LIKE '%disable%trigger%'

但是有时候会存在误报,比如,在你的代码里面可能存在同样的信息。但是筛选数据对性能和检查问题总是有好处的。

小结:

捕获事件有很多种方式。此功能仅限2008企业版使用。

分享到:
评论

相关推荐

    新手學稽核SQL Server Audit-SQL Server 2008

    新手學稽核SQL Server Audit-SQL Server 2008

    使用SQL Server Audit记录数据库变更

    但Trace的成本比较大,对于负载量较高的系统并不合适,而CDC需要影响业务库,因此SQL Server Audit是一个比较好的选择。  在SQL Server中,如果只是希望获得表的更新时间,只需要看表的聚集索引的后更新时间即可,...

    Simple SQL Server Audit-开源

    SQL Server Audit 是一个简单的应用程序,用于生成审计表和触发器,这些表和触发器对 SQL Server 上的所有 INSERT、UPDATE 和 DELETE 操作执行全面的审计。 应用程序设计得尽可能简单、快速,适用于常见情况

    server_audit.so

    mariadb5.5.68linuxx86_64.tar解压出来的日志审计插件 可直接放在mysql安装目录 install

    server_audit.rar

    MariaDB和MySQL在广泛的环境中使用,但是如果您需要记录用户访问权限以符合组织的审计法规,则以前必须使用其他数据库解决方案。为了满足此需求,MariaDB开发了MariaDB审计插件。尽管MariaDB审核插件具有一些仅适用...

    server_audit.zip

    ariaDB开发了MariaDB审计插件。可以用于mysql

    server_audit.dll

    mysql 审计插件,下载下来放到plugin目录下就可以直接用

    oracle开启audit(审计)

    oracle开启audit(审计)的详细过程.

    generator-jhipster-entity-audit:JHipster模块启用实体审核和审核日志页面

    “审核日志”页面是可选的,可以在运行生成器时通过选择选项来添加jhipster-entity-audit模块将自己注册为Jhipster的挂钩,并且启用审计的问题也将在将来的实体生成期间提供。[BETA] Javers整合使用sql或mongodb时...

    Audit系统概念、规划和实施

    Audit是AIX平台下的审计系统,其配置灵活,功能强大,能实现大部分客户对于系统监控的要求。 本课程从Audit的概念入手,详细讲解Audit组成,并通过一个例子,阐述如何配置Audit系统,如何运行和分析Audit系统;然后...

    SQL Server——从入门到放弃(8)– GRANT/ REVOKE / AUDIT 练习

    从今天开始就要开始第四章——数据库安全性的学习。现在,开始练习。 关系数据库系统中存取控制对象 此次练习需要多个用户,所以首先应该创造几个用户。 然后就是发现,用户的登录名不能相同,不然会报错。...

    adobe auditon 3.0 教程

    adobe auditon 3.0 教程

    wincc Audit V7.4软件配置步骤.doc

    西门子组态软件 wincc 7.4 audit 功能配置步骤,介绍如何在wincc中配置audit功能以及使用

    django-audit-trigger:结合Postgres审计触发器和Django

    django-audit-trigger也具有不同的机制来管理模型的审计订阅。 要求 django> = 1.9(目前是开发主干) postgres> = 9.4 postgres触发器 django-audit-trigger使用的稍微修改的版本。 代替hstore

    monitor-table-change-with-sqltabledependency:获取记录表更改时SQL Server通知

    如果我们希望在不关注底层SQL Server基础结构的情况下获得有关记录表更改的警报,则SqlTableDependency的记录表更改通知将为我们做到这一点。 使用通知,应用程序可以检测到表记录更改,从而使我们不必不断地重新...

    ORACLE_审计内容_DBA_AUDIT_TRAIL.xlsx

    Oracle审计内容DBA_AUDIT_TRAIL数据字典说明,根据开启的Oracle审计功能,读取dba_audit_trail视图的审计内容包含用户名、操作时间、操作类型、SQL文本、数据库操作次数等等,此文档是对dba_audit_trail视图的中文简介,...

Global site tag (gtag.js) - Google Analytics