最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更。在SQL Server中这类工作如果不事前捕获记录的话,无法做到。对于捕获变更来说,可以考虑的选择包括Trace,CDC。但Trace的成本比较大,对于负载量较高的系统并不合适,而CDC需要影响业务库,因此SQL Server Audit就是一个比较好的选择。

     在SQL Server中,如果只是希望获得表的更新时间,只需要看表的聚集索引的最后更新时间即可,代码如下:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'DateBaseName')
AND OBJECT_ID=OBJECT_ID('TableName')

 

    但这种方式并不能看到由某人在某个时间修改了某个表,在此使用Server Audit。Server Audit底层采用的是扩展事件,且存储结构可以以单独文件独立于用户库,因此不仅性能较好,也不会对用户库产生影响。

    下面是启用审核的T-SQL代码:

USE master
CREATE SERVER AUDIT audit1 TO FILE (FILEPATH='D:\SQLAudit')
USE AdventureWorks2012
CREATE DATABASE AUDIT SPECIFICATION SerialPic FOR SERVER AUDIT audit1
ADD(UPDATE,INSERT,DELETE ON Person.Address by dbo)

 

USE master
CREATE SERVER AUDIT audit1 TO FILE (FILEPATH='D:\SQLAudit')
USE AdventureWorks2012
CREATE DATABASE AUDIT SPECIFICATION SerialPic FOR SERVER AUDIT audit1
ADD(UPDATE,INSERT,DELETE ON Person.Address by dbo)

 

   上述代码首先创建服务器级别的审核,并存入D:\SQLAudit中,然后对应创建数据库级别的审核。在数据库级别的审核中,跟踪Person.Address表的Update,Insert,Delete操作。

 

    接下来尝试修改数据库Person.Address,在安全-审核下查看审核日志,如图1所示。

图1.查看审核日志

 

    结果如图2所示。

图2.数据库审核记录

 

    这样就可以看到谁在什么时间曾经对该表做过哪些修改。当然除了UI方式,也可以通过T-SQL方式查看审核记录。

SELECT * FROM
fn_get_audit_file('D:\SQLAudit\audit1_B8A7821A-D735-446D-B6FA-DF582AB80375_0_130648999540780000.sqlaudit', default, default)

使用SQL Server Audit记录数据库变更的更多相关文章

  1. SQL Server Audit监控触发器状态

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 注意事项(Attention) 疑问(Questions) 参 ...

  2. SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

    5.启动SQL Server服务和数据库 在数据库和服务启动过程中,经常会出现的问题: 1.SQL Server实例无法正常启动 2.系统数据库无法正常启动 3.网络配置失败 4.用户数据库无法启动 ...

  3. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  4. SQL Server 进阶 01 数据库的设计

    SQL Server 进阶 01 数据库的设计 本篇目录 课程内容回顾及介绍 为什么需要规范的数据库设计 设计数据库的步骤 绘制E-R(实体-关系)图 实体-关系模型 如何将E-R图转换为表 数据规范 ...

  5. Sql Server系列:数据库组成及系统数据库

    1. 数据库组成 数据库的存储结构分为逻辑存储结构和物理存储结构. ◊ 逻辑存储结构:说明数据库是由哪些性质的信息所组成.SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息 ...

  6. SQL Server 2008 R2数据库镜像部署

    概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在 ...

  7. SQL Server 维护计划实现数据库备份(Step by Step)(转)

    SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server  ...

  8. SQL Server 维护计划实现数据库备份(Step by Step)

    转自:http://www.cnblogs.com/gaizai/archive/2011/11/18/2254445.html 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSM ...

  9. 第四篇 SQL Server代理配置数据库邮件

    本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...

随机推荐

  1. Python socket (单线程)

    client, 客户端 code : 客户端主要方法, s.send(); s.sendall(); s.recv(); s.connect() class Client(object): def _ ...

  2. Sql server中访问Excel---select from Excel

    本文介绍在MSSMS中通过SQL语句查询Excel的方法. 访问Excel主要是通过Office提供的ACE数据源来完成这个操作,使用opendatasource来实现访问Excel.即在MSSMS中 ...

  3. ubuntu安装octave的小坑

    出现了以下情况: After this operation, 163 MB of additional disk space will be used.Do you want to continue? ...

  4. js继承理解(有引用)

    具体栗子:http://www.cnblogs.com/ayqy/p/4471638.html(地下为自己理解总结,可能晦涩,链接详细) 1.父类实例赋予子类原型. 2.利用子类函数引用 父类.cal ...

  5. wp学习计划!

    对wp兴趣很大,可真正学习时,目的性就很不明确了,其实这有两大问题阻碍着,一是自身的基础还不够扎实,二是学习资料不好找,前者只能慢慢积累,而后者却是可以改变的,现在我的主阵营是channel 9上的w ...

  6. MVC特性

    MVC与ASP.NET MVC基础概念 MVC是Model-View-Controller的缩写. MVC将应用程序划分为3大组件:模型\视图\控制器. MVC不是ASP.NET所特有,它只是一种开发 ...

  7. Windows 自动关机/定时关机 命令 shuntdown

    一 .倒计时关机:      指定系统在10分钟后自动关闭:点击"开始→运行",输入命令"Shutdown -s -t 60"(注意:引号不输入,参数之间有空格 ...

  8. 用javascript写Android和iOS naitve应用,实在炫酷。

    关注NativeScript有一段时间了,说好了的三月发第一个Beta版,终于发布了. // declare the extended NativeScriptActivity functionali ...

  9. mongoDB研究笔记:复制集故障转移机制

    上面的介绍的数据同步(http://www.cnblogs.com/guoyuanwei/p/3293668.html)相当于传统数据库中的备份策略,mongoDB在此基础还有自动故障转移的功能.在复 ...

  10. 新浪微博UWP UI意见征求

    各位园主,卑职最近在忙一些新浪微博UWP的事儿,其中有一些UI上的design和实现,拿出来见见公婆,请大家给个意见: 您是喜欢A还是B.麻烦直接回在评论区了,写A或B,愿意多写几句意见的更欢迎! 先 ...