SQLServer数据库审计功能入门之SQL Server审核 (SQL Server Audit)
小标 2018-07-18 来源 : 阅读 7835 评论 0

摘要:本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

介绍

    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]GOCREATE SERVER AUDIT [Audit-AuditTest]TO APPLICATION_LOGWITH

( QUEUE_DELAY = 1000

,ON_FAILURE = CONTINUE

)GOAlter SERVER AUDIT [Audit-AuditTest] With(State=On)goCreate Server Audit Specification SAS_CreateDropLoginFor Server Audit [Audit-AuditTest]Add (SERVER_PRINCIPAL_CHANGE_GROUP)With (State=On)gocreate login xx with password='P@ssW0rd';drop login xx ;

 

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

总结

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

2. 审核是针对“事件“,回答”谁什么时候干了什么“,但对数据本身变化的跟踪力度较弱。

3. 审核的目标结果,无论是审核文件或者应用程序日志,都需要另外处理和分析才能得想要的内容。

本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程