AutoAudit研究学习

  • 时间:
  • 浏览:2

[Audit].[vAuditArchive]

[Audit].[vAuditHeaderAll]

GO

1:数据库DDL触发器SchemaAuditDDLTrigger

GO

GO

GO

此时,你查询[Audit].[SchemaAudit],发现数据库DDL触发器肯能捕获了你创建视图、存储过程等等的DDL脚本

    @LogUpdate = 1,

[Audit].[pAutoAuditSetTriggerStateAll]

这么 AutoAudit你这俩脚本能做什么跟踪审计方面的工作呢?下面笼统的总结了一下AutoAudit的功能:

ALTER TABLE TEST DROP COLUMN SEX;

    @BaseTableDDL = 0,

    @ColumnNames = '<all>',

AutoAudit部署

AutoAudit你这俩是Paul Nielsen写的十个 开源的审计跟踪的脚本项目,项目地处https://autoaudit.codeplex.com/上,Paul Nielsen的一篇博客CodeGen to Create Fixed Audit Trail Triggers上也介绍了他创建你这俩项目的前因后果。目前最新的版本为3.200a,官方文档写着支持SQL Server 2005, 2008, 2012。根据我的测试,SQL Server 2014也是支持的。看得人你这俩项目最后一次更新时间为2012年,也而是说那个以前 SQL Server 2014SQL Server 2016SQL Server 2017都还这么 发布。能不到从前说,AudoAudit你这俩项目自2012年后,肯能停止更新了。

[Audit].[AuditDetailArchive]     [Audit].[AuditDetail]的归档数据。

@LogUpdate  0表示不审计任何UPDATE1表示只会记录SQL等信息到表AuditHeader2表示不仅捕获SQL等信息,算是捕获删剪数据变化值到AuditDetail

[Audit].[AuditSettings]          AutoAudit的相关参数

@ColumnNames 表的字段,肯能只为<All>这么 在AuditDetail记录所有字段的变化值,不能不到只记录某个或某些字段的值。

1: 审计、跟踪记录所有的DDL脚本。

[Audit].[vAuditDetailAll]

GO

就会在'DataBaseSizeDtl_Day'下面生成十个 触发器DataBaseSizeDtl_Day_Audit_DeleteDataBaseSizeDtl_Day_Audit_InsertDataBaseSizeDtl_Day_Audit_Update,或者大伙往你这俩表插入数据(启动作业YourSQLDba_Monitor_Database_Daily_Growth)即可,这么 接下来,查看[Audit].[AuditHeader]表,就能看得人什么HostNameSysUserApplicationTableOperationSQLStatement等等具体信息

SELECT * FROM [Audit].[AuditHeader]

[Audit].[RemoveIt]

[Audit].[pAutoAuditSetTriggerState]

    @TableName = 'db_objects',

    @StrictUserContext = 1,

   能不到灵活配置、动态监控某个表、或一批表、肯能所有表的DML操作,累似 INSERTUPDATEDELTE操作,能不到只捕获SQL句子,不能不到捕获相关值的变化(记录修改前的值与修改后的值)。能不到设置参数、在被监控的表上动态的生成触发器等。

    @BaseTableDDL = 0,

ALTER TABLE TEST ADD SEX BIT;

GO

参考资料:

[Audit].[pAutoAuditAll]

SELECT * INTO db_objects FROM sys.objects;

@LogInsert  0表示不审计任何INSERT1表示只会记录SQL等信息到表AuditHeader2表示不仅捕获SQL等信息,算是捕获删剪数据变化值到AuditDetail

[Audit].[ProcessDataAuditsCleanup]

[Audit].[AuditAllExclusions]     排除审计、跟踪的表

https://autoaudit.codeplex.com/

USE YourSQLDba;

当然也还有某些某些bug,如下所:

EXEC Audit.pAutoAudit @SchemaName = 'dbo',

CREATE TABLE TEST(ID INT ,NAME VARCHAR(12));

AutoAudit的部署是非常简单的事情,你从官方下载十个 AutoAuditSQL脚本,累似 当前版本为AutoAudit 3.200a.sql,想要修改某些变量或不做修改,在你不到做审计跟踪的数据库执行脚本就轻松部署了。当然,肯能我想要搞掂、弄透句子,还得花费一番功夫研究一下脚本。AutoAudit 3.200a.sql的脚本相当于20000多行,上边有絮状的注释,代码非常优雅、简洁。买车人拜读起来,感觉而是一件精雕细琢的艺术品,爽心悦目。下面来简单介绍一下你这俩开源项目吧,估计认真看代码的这么 几买车人。

@SchemaName 审计表的Schema

    @LogDelete = 1

EXEC Audit.pAutoAudit @SchemaName = 'dbo',

[Audit].[pAutoAuditArchive]

[Audit].[pAutoAudit]

ALTER TABLE TEST ADD SEX BIT;

Procedure16个)

DROP TABLE TEST;

View5个)

http://sqlblog.com/blogs/paul_nielsen/archive/2007/01/15/codegen-to-create-fixed-audit-trail-triggers.aspx

@TableName  审计表的表名

[Audit].[vAuditAll]

如下所示,SchemaAuditDDLTrigger触发器会捕获DDL相关脚本记录到表下[Audit].[SchemaAudit]XMLEventData上边暗含 了具体、删剪的信息。累似 脚本执行的时间、ServerName等等。

[Audit].[pAutoAuditDrop]

SELECT * FROM [Audit].[AuditSettings]

AutoAudit介绍

[Audit].[AuditSettings]是配置信息表,关于AudoAudit的配置信息都地处该表。肯能要了解、学习AudoAudit你这俩项目,这么 不到了解什么参数。参数具体功能不到不到参加脚本注释信息.

这么 接下来,大伙想审计、跟踪某个具体表,累似 ,大伙想审计、跟踪[Maint].[DataBaseSizeDtl_Day]表,这么 能不到通过存储过程Audit.pAutoAudit去实现

GO

[Audit].[ProcessDataAuditsCleanupForAllDb]

    @TableName = 'db_objects',

    @LogDelete  0表示不审计任何DELETE1表示只会记录SQL等信息到表AuditHeader2表示不仅捕获SQL等信息,算是捕获删剪数据变化值到AuditDetail

[Audit].[AuditHeader]            记录表DML操作的相关用户、系统进程、以及SQL句子等。

[Audit].[AuditHeaderArchive]     [Audit].[AuditDetail]表的数据归档表

[Audit].[AuditBaseTables]        记录审计、跟踪表的相关参数,它会取这里的相关值动态生成相关触发器。默认为空

INSERT INTO TEST

[Audit].[AuditDetail]            记录表数据INSERTUPDATEDELETE变化前后的值(能不到记录删剪字段或累积字段)

    @ColumnNames = '[type_desc],[create_date]',

GO

[Audit].[SchemaAudit]            记录数据库的DDL信息,累似 SQL、系统进程等等。

    @LogSQL = 1,

AudtoAudit配置简单、灵活,能不到在做到基本审核或精细审核,删剪能不到根据不到定制审计粒度信息; 另外,代码暗含 某些地方值得大伙学习、借鉴的地方。或者测试AutoAudit的过程中也发现了某些Bug,目前该项目停止更新,不到买车人处里什么现象,累似 ,当主键的字段算是第一列或者指定具体列@ColumnNames时,这么 在使用Audit.pAutoAudit 创建相关触发器时就会报错,如下截图所示

[Audit].[pAutoAuditDropAll]

[Audit].[vAudit]

GO

SELECT 2000, 'KERRY', 1 ;

TRUNCATE TABLE [Audit].[SchemaAudit]

2:创建某些数据库对象,肯能这么 修改参数@AuditSchema,默认创建在Audit你这俩Schema下面。

    @LogSQL = 1,

[Audit].[ProcessExpiredDataAudits]

GO

ALTER TABLE db_objects ADD CONSTRAINT pk_db_objects PRIMARY KEY(OBJECT_ID);

@StrictUserContext 默认为1,肯能为0,这么 会在跟踪升级表上增加字段[AutoAudit_CreatedDate][AutoAudit_CreatedBy]等。

[Audit].[ReactivateIt]

    @LogDelete = 1

你这俩都不到你调试代码,找出错误的由于着,修改相关代码(主要算是动态生成SQL时,有某些SQL语法错误,累似 多了十个 ,等等),目前。肯能我肯能发现并修改了该代码多处地方的小Bug

    @LogInsert = 1,

最后跟踪审计,肯能这么 必要句子,最好未必开启,除非是为查找定位某些现象,肯能毕竟你这俩还是有所以额外的性能开销、损耗,尤其是你这俩使用触发器来跟踪、审计,AutoAudit也明确指出你这俩会影响性能:Adding AutoAudit to your tables will impact performance.

USE YourSQLDba;

SELECT * FROM AUDIT.AuditDetail

[Audit].[SuspendIt]

2: 审计DML(INSERTUPDATEDELETE)的脚本以及数据变化。

    @LogUpdate = 1,

    @LogInsert = 1,

    @StrictUserContext = 1,

CREATE TABLE TEST(ID INT, NAME VARCHAR(24));

Table8个)

AutoAudit的优缺点

@BaseTableDDL     0表示在基表不增加审计字段,1表示在基表增加审计字段

注意,对应参数的不同值会影响触发器以及审计内容以及数据。

@LogSQL           0表示太久再AuditHeader中记录DML操作的SQL1表示在AuditHeader中记录DML操作的SQL

肯能你这么 修改任何参数,执行完你这俩脚本后,就会在当前数据库上创建下面某些对象:

存储过程是根据参数,动态生成被审计表的相关触发器,如下所示,

GO

使用账号tmp登录数据库,执行下面一批脚本

   它创建了十个 数据库DDL的触发器,它会捕获DDL相关脚本。累似 ,创建、修改、删除数据库对象等。

[Audit].[GenerateIt]

下面大伙来测试一下AutoAudit的功能吧, 如下所示,大伙清空[Audit].[SchemaAudit]下数据,或者创建、修改TEST表,具体测试脚本如下,数据库的DDL触发器会捕获相关DDL SQL,当然DML操作是太久再被捕获的。

[Audit].[pAutoAuditRebuildAll]

[Audit].[pAutoAuditRebuild]