原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

介绍

Audit是SQL Server 2008之后才有的功能,它能告诉你“谁什么时候做了什么事情”。具体是指审核SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件。它的底层是基于扩展事件(Extented Event),所以其性能和灵活性相对较好。审核数据可以输出到审核文件、Windows安全日志和应用程序日志。

Audit都需要创建一个实例级的“SQL Server审核”,然后可以创建从属于它“服务器审核规范”和“数据库审核规范”。可以理解“SQL Server审核”是审核的顶级容器,这两个“规范”是定义要审核的具体内容。

创建和使用审核的一般过程:

1. 创建审核并定义目标。

2. 创建映射到审核的服务器审核规范或数据库审核规范,并启用审核规范。

3. 启用审核。

4. 通过使用 Windows“事件查看器”、“日志文件查看器”或 fn_get_audit_file 函数来读取审核事件。

实现

创建测试数据库和数据:

use master

go

create database AuditTest

go

use AuditTest

go

create table tb(ID int primary key ,name varchar(20),weight decimal(10,2));

insert into tb values(1,'John',70.2),(2,'Ted',80.8),(3,'Clark',75.1)

go

1. 创建审核和定义目标。

创建审核可以用SSMS或者语句实现。所谓目标,就是审核输出存到哪里,与扩展事件的Target差不多。

对应的语句创建:

--create Server Audit

USE [master]

GO

CREATE SERVER AUDIT [Audit-AuditTest]

TO FILE

( FILEPATH = N'D:\share'

 ,MAXSIZE = 50 MB

 ,MAX_FILES = 10

 ,RESERVE_DISK_SPACE = ON

)

WITH

( QUEUE_DELAY = 1000

 ,ON_FAILURE = CONTINUE

 --AUDIT_GUID=uniqueidentifier 

)

--WHERE object_name='tb'

GO

--Enable Server Audit

alter server audit [Audit-AuditTest] with (state=on)

简单说明一下相关参数:

TO FILE:指定输出到审核文件,也可以指定为Security Log和Application Log。
FILEPATH:审核文件的目录地址。

MaxSize:单个审核文件的最大容量。
MAXSIZE:类似于Trace,指定Rollover允许最多文件数。
RESERVE_DISK_SPACE:预先分配审核文件到MaxSize。个人推荐启用。
QUEUE_DELAY:指定事件发生到被强制审核的毫秒间隔。指定为0则为同步审核。
ON_FAILURE :当审核向上档写入数据失败时,接下来会采取的行为:CONTINUE | SHUTDOWN | FAIL_OPERATION。
AUDIT_GUID:用于数据库镜像。类似Login的SID作用,镜像会话的主库如果有审核,则在镜像库创建对应的审核需要指定同样GUID。

WHERE:相当于扩展事件中Predicate,用于指定过滤条件。

2. 创建数据库审核规范并启用之

指定从属于哪个SQL Server审核和定义出要审核的内容。可以通过SSM或者语句创建之。下面针对测试表tb创建审核规范:任何人对tb表的DML和表结构修改操作都被审核。

对应的语句:

--Create and enable Database Audit Specification

USE [AuditTest]

GO

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-AuditTest]

FOR SERVER AUDIT [Audit-AuditTest]

ADD (SCHEMA_OBJECT_CHANGE_GROUP),

ADD (SELECT,DELETE,INSERT,UPDATE ON OBJECT::[dbo].[tb] BY [public])

WITH (STATE=ON)

GO

对照SSMS,参数的意义就很明白了。更详细内容参考:CREATE DATABASE AUDIT SPECIFICATION

审核活动类型(Audit Action Type)参考:SQL Server 审核操作组和操作

3. 启用审核

SQL Server在创建审核和审核规范时,默认是不启用,需要显式启用。在前面两步,我已经显式启用了。

4. 测试和查看审核数据

use AuditTest

go

select * from dbo.tb

where ID=1;

update dbo.tb

set name='Ted_New'

where ID=2;

alter table dbo.tb alter column name varchar(30);

alter table dbo.tb add newCol varchar(20);

go

在前面目标定义的文件中会生成一个审核文件,文件名:[SQL Server审核名称]_[审核的GUID]_*.sqlaudit。

这个文件也可以用其它文字编辑器打,但是不便阅读。通常使用系统函数sys.fn_get_audit_file读取它。

SELECT event_time

    , action_id

    , succeeded

    , session_id

    , session_server_principal_name

    , object_name

    , statement

    , file_name

    , audit_file_offset

from sys.fn_get_audit_file('d:\share\*',default,default)

从结果可以得到:谁在什么时候做了什么。Select和Alter语句只有一条记录。Update有两条记录,一条Select和一条Update。将audit_file_offset的值传递给fn_get_audit_file作为第三个参数值,可以实现从指定的offset读取审核文件。注意:event_time输出为UTC时间了。

当然也可以直接查看:

5. 尝试服务器审核规范

审核创建和删除登录,并将审核内容记录到应用程序日志。

USE [master]
GO
CREATE SERVER AUDIT [Audit-AuditTest]
TO APPLICATION_LOG
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
)
GO
Alter SERVER AUDIT [Audit-AuditTest] With(State=On)
go
Create Server Audit Specification SAS_CreateDropLogin
For Server Audit [Audit-AuditTest]
Add (SERVER_PRINCIPAL_CHANGE_GROUP)
With (State=On)
go
create login xx with password='P@ssW0rd';
drop login xx ;

通过Windows的事件查看器,可以查看到33205事件。个人觉得在查看数据详细事件时,使用XML格式更好理解一些。

总结

  1. SQL Server审核相对而言性能影响较少,审核粒度也非常灵活。

  2. 审核是针对“事件“,回答”谁什么时候干了什么“,但对数据本身变化的跟踪力度较弱。
  3. 审核的目标结果,无论是审核文件或者应用程序日志,都需要另外处理和分析才能得想要的内容。

SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)的更多相关文章

  1. SQL Server审计功能入门:更改跟踪(Change Tracking)

    原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...

  2. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  3. Windows Server 2003从入门到精通之Windows Media Server流媒体服务器架建[转]

    今天我们来做一个windows media server流媒体格式文件的流媒体服务器. 现在市面上能够买到的一些电影文件有 rm格式和wmv格式.还有一些是DivX技术的avi格式,要想让你的服务器对 ...

  4. sql的强大功能(看一条sql解决的复杂业务)

        一条sql语句解决的复杂业务,请往下看:     业务介绍:一个单位有多个立项(立项信息表里有单位id),每个立项可能被预警多次(预警信息表里的uuid字段的值里包含有立项id或单位id),每 ...

  5. Mysql5.6审计功能

    1. 前言         为了安全和操作的可追溯性考虑,越来越多的公司增加了审计功能.mysql5.5推出了相关的审计功能,到5.6.20功能进一步完好.算是勉强可用了.尽管细粒度方面做的不是太好. ...

  6. 开启mysql审计功能

    下面方式是在线开启,重启后会失效: 1.mysql社区版没有审计插件,先获取server_audit.so文件,我是先在一台测试服务器上安装了一个mariadb数据库,然后搜索find / -name ...

  7. SQL Server 2008新增的审核/审计功能(Audit)

    很多时候我们都需要对数据库或者数据库服务器实例进行审核/审计 例如对失败的登录次数进行审计,某个数据库上的DDL语句进行审计,某个数据库表里面的delete语句进行审计 事实上,我们这些审计的需求基本 ...

  8. SQL Server 审计

    审计(Audit)用于追踪和记录SQL Server实例或数据库中发生的事件,审计主要包括审计对象(Audit)和审计规范(Audit Specification),创建审计首先需要创建一个SQL S ...

  9. SQL Server 审计操作概念

    概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...

随机推荐

  1. 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本

    使用angular resource载入中priorityData.json中间json数据,结合D3绘制甜甜圈图.执行index.html其结果见于图.: priorityData.json中jso ...

  2. 仿CSDN Blog返回页面顶部功能

    只修改了2个地方: 1,返回的速度-->改成了慢慢回去.(原来是一闪而返回) 2,返回顶部图标出现的时机-->改成了只要不在顶部就显示出来.(原来是向下滚动500px后才显示) 注意:JS ...

  3. IT行业为什么没有进度

    参加工作多年了,来来回回参与了N多项目,大部分都是政府性的招标项目.每个项目都是顺利进行验收,在这些验收过的项目中大部分都或多或少都有一定的时间延期,每个项目都能够和合同或者需求说明书对应的上,但是真 ...

  4. cocos2d-x适配多分辨率

    现在用的2d-x版本是2.1.1.现在的项目要求是iphone ,iphone Retina,ipad和ipad Retina都有各自的路径来存放各自需要的资源.在AppDelegate的 appli ...

  5. 使用 WPF 实现所见即所得HTML编辑器

    Introduction In this tip, you will learn the use of WPF webbrowser control and the use of the librar ...

  6. IIS7构造Gzip压缩

    IIS7构造Gzip压缩 本文来自Kevin Yang博客 作者:Kevin Yang 开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在easy了很多.并且默认情况下 ...

  7. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  8. JAVA实现DAO基本层CRUD操作

    随着shh2各种操作方便框架.越来越多JAVA WEB效率,可是,假设在不了解这些框架使用的场合的情况下,一拿到项目就盲目地选择这些框架进行系统架构的搭建,就有可能造成非常多不是必需的资源浪费. 在项 ...

  9. nuget 命令详解

    包相关 Install-Package 安装包   -Version 4.3.1 参数指定版本Uninstall-Package 卸载包Update-Package 更新包Get-Package 默认 ...

  10. Windows8和Windows Phone应用开发主题编码汇总

    原文:Windows8和Windows Phone应用开发主题编码汇总 在Windows 8和Windows Phone应用开发中经常需要自定义一些Windows Store应用风格主题,下面列举一些 ...