原文: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. Windows Phone开发(45):推送通知大结局——Raw通知

    原文:Windows Phone开发(45):推送通知大结局--Raw通知 为什么叫大结局呢?因为推送通知服务就只有三种,前面扯了两种,就剩下一种--Raw通知. 前面我们通过两节的动手实验,相信大家 ...

  2. 实现Android ListView 自动加载更多内容

    研究了几个小时终于实现了Android ListView 自动加载的效果. 说说我是怎样实现的.分享给大家. 1.给ListView增加一个FooterView,调用addFooterView(foo ...

  3. jenkins集群加入Windows 2012 server作为slave

    必须安装.net framework 3.5, 參考: http://technet.microsoft.com/en-us/library/dn482071.aspx 不要在windows 2012 ...

  4. Android学习笔记四十Preference使用

    Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...

  5. 【原创】poj ----- 2524 Ubiquitous Religions 解题报告

    题目地址: http://poj.org/problem?id=2524 题目内容: Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 6 ...

  6. android 泰国/缅甸语/捷克较低,Contacts联系出现精神错乱之类的问题清单

    更改ContactsProvider2.java文件 public static final String SECTION_HEADING = "SUBSTR(%1$s,1,1)" ...

  7. uip UDPclient模式通信移植,当地port随机

    现在移植UDPclient模式,测试广播地址. //udp_client.c /************************************************************ ...

  8. Google Maps Android API v2 (2)- 地图对象

    地图对象 Android的谷歌地图API允许你在你的Andr​​oid应用程序中显示谷歌地图.在谷歌地图移动(GMM)的应用程序,你看到的地图,这些地图具有相同的外观和API暴露出许多相同的功能.GM ...

  9. WebPack实例与前端性能优化

    [前端构建]WebPack实例与前端性能优化   计划把微信的文章也搬一份上来. 这篇主要介绍一下我在玩Webpack过程中的心得.通过实例介绍WebPack的安装,插件使用及加载策略.感受构建工具给 ...

  10. android 网络运营商的名字显示规则(锁定屏幕,下拉列表)

    一:Background & 有关flow MTK Operator name display分为两种类型的手机: 1. Sim卡名称: 从基于引导SIM卡读取IMSI到Spn-conf.xm ...