博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用SQL Server Audit记录数据库变更
阅读量:6112 次
发布时间:2019-06-21

本文共 1321 字,大约阅读时间需要 4 分钟。

    最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更。在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)

转载地址:http://xzcka.baihongyu.com/

你可能感兴趣的文章
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>