SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
原文: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格式更好理解一些。

总结
- SQL Server审核相对而言性能影响较少,审核粒度也非常灵活。
- 审核是针对“事件“,回答”谁什么时候干了什么“,但对数据本身变化的跟踪力度较弱。
- 审核的目标结果,无论是审核文件或者应用程序日志,都需要另外处理和分析才能得想要的内容。
SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)的更多相关文章
- SQL Server审计功能入门:更改跟踪(Change Tracking)
原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...
- SQL Server审计功能入门:CDC(Change Data Capture)
原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...
- Windows Server 2003从入门到精通之Windows Media Server流媒体服务器架建[转]
今天我们来做一个windows media server流媒体格式文件的流媒体服务器. 现在市面上能够买到的一些电影文件有 rm格式和wmv格式.还有一些是DivX技术的avi格式,要想让你的服务器对 ...
- sql的强大功能(看一条sql解决的复杂业务)
一条sql语句解决的复杂业务,请往下看: 业务介绍:一个单位有多个立项(立项信息表里有单位id),每个立项可能被预警多次(预警信息表里的uuid字段的值里包含有立项id或单位id),每 ...
- Mysql5.6审计功能
1. 前言 为了安全和操作的可追溯性考虑,越来越多的公司增加了审计功能.mysql5.5推出了相关的审计功能,到5.6.20功能进一步完好.算是勉强可用了.尽管细粒度方面做的不是太好. ...
- 开启mysql审计功能
下面方式是在线开启,重启后会失效: 1.mysql社区版没有审计插件,先获取server_audit.so文件,我是先在一台测试服务器上安装了一个mariadb数据库,然后搜索find / -name ...
- SQL Server 2008新增的审核/审计功能(Audit)
很多时候我们都需要对数据库或者数据库服务器实例进行审核/审计 例如对失败的登录次数进行审计,某个数据库上的DDL语句进行审计,某个数据库表里面的delete语句进行审计 事实上,我们这些审计的需求基本 ...
- SQL Server 审计
审计(Audit)用于追踪和记录SQL Server实例或数据库中发生的事件,审计主要包括审计对象(Audit)和审计规范(Audit Specification),创建审计首先需要创建一个SQL S ...
- SQL Server 审计操作概念
概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...
随机推荐
- 【C/C++】BinarySearch
/* * BinarySearch.c * * Created on: 2014年6月25日 * Author: wenbo */ #include <stdio.h> int binar ...
- Jsoup 抓取和数据页 认识HTTP头
推荐一本书:黑客攻防技术宝典.Web实战篇 : 顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干 ...
- 《Javascript高级程序设计》读书笔记之继承
1.原型链继承 让构造函数的原型对象等于另一个类型的实例,利用原型让一个引用类型继承另一个引用类型的属性和方法 function SuperType() { this.property=true; } ...
- 通过 HTTP 头进行 SQL 注入(转)
英文原文:DatabaseTube,翻译:开源中国 在漏洞评估和渗透测试中,确定目标应用程序的输入向量是第一步.这篇文章解释了别人是如何通过HTTP头部对你的数据库进行SQL注入攻击的,以及讨论下选择 ...
- Ansj配置指南!
=.= 折腾死 ①你想要http://maven.ansj.org/org/ansj/ansj_seg/找一个尽可能高的版本号,比方2.0.7,点进去之后找到相应的jar,比方ansj_seg-2.0 ...
- Ubuntu 组态 Tomcat而每天的错误解决
统环境:Ubuntu 14.10 安装版本号:apache-tomcat-7.0.54.tar.gz 安装步骤: 1.下载 Tomcat 下载 apache-tomcat-7.0.54.tar.gz ...
- Java对于私有变量“反思暴力”技术
(1)这两个类:(在相同的包装可以是) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc=/font/5a6L5L2T/font ...
- VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器
VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器 View Compose服务可安装在管理虚拟机的vC ...
- Java Web整合开发(附录2) -- NetBeans的(默认)快捷键
1.完成代码:ctrl+\ //任何地方按下此组合键,均会提示相应的参考字段: 2.错误提示:alt + enter //顾名思义,当系统报错时,按下此组合可以查看系统提示: 3.自动完成字符串: c ...
- JS window.open()财产
一. Window 对象 Window 对象是 JavaScript 顶级对象层次. Window 对象表示一个浏览器窗口或帧. Window 在对象 <body> 或 <frame ...