接上文: SQL Server 安全篇——SQL Server 审核(1)——概览 ,本文介绍如何创建服务器审核、服务器审核规范(specification)和 数据库审核规范。
创建服务器审核:
可以使用CREATE SERVER AUDIT来创建服务器审核,其可选项有:
| 选项 | 说明 | 
| FILEPATH | 指定审核日志的路径,只对使用了文件目标起效。 | 
| MAXSIZE | 审核文件最大大小,最小限制为2MB。仅对使用了文件目标起效。 | 
| MAX_ROLLOVER_FILES | 当单个审核文件已满,可以循环使用现有文件或者产生新文件。该选项控制在开始循环使用现有文件前最多可以创建多少个新文件。默认为UNLIMITED(不限制),如果为0,则代表只有一个,如果5,代表有6个,仅对使用了文件目标起效。 | 
| MAX_FILES | 是MAX_ROLLOVER_FILES的另一个选项,当文件数到达指定数量时,不循环使用,而是发出ON_FAILLURE中设置的事件响应。仅对使用了文件目标起效。 | 
| RESERVE_DISK_SPACE | 预分配文件空间,仅对文件目标起效。 | 
| QUEUE_DELAY | 指定审核事件使用同步写还是异步写。如果为0,则同步写,非0为异步写。延时默认值为1000(1秒)。 | 
| ON_FAILURE | 一旦审核操作失败将会发出事件,可用值有:CONTINUE、SHUTDOWN和FAIL_OPERATION。CONTINUE代表出现异常时继续。FAIL_OPERATION允许发生错误的操作失败但允许其他操作继续。SHUTDOWN强制停止实例,如果该登录名没有此权限,则该函数将失败并将引发错误消息。 | 
| AUDIT_GUID | 当附加数据库到实例上时,可以通过指定特定的GUID到服务器审核中,从而避免SQL Server针对新库重新产生审核。 | 
另外,使用服务器审核的筛选器可以只收集感兴趣的信息而不用全量收集。这种类似于“去噪”。
下面演示如何创建一个服务器审核,脚本中演示了创建文件目标,并使用UNLIMITED来不限制文件个数,每个文件大小限制于256MB。
USE Master 
GO 
--创建名为Audit-Test的服务器审核
CREATE SERVER AUDIT [Audit-Test] 
TO FILE		--以文件形式存储
( 
        FILEPATH = 'E:\Audit'			--注意替换路径为实际路径
        ,MAXSIZE = 256 MB					--每个文件最大256MB
        ,MAX_ROLLOVER_FILES = 2147483647	--指定文件数目,2147483647为最高值,只有取消选中“无限制”时才可用
        ,RESERVE_DISK_SPACE = OFF			--不预先分配磁盘空间
) WITH 
( 
        QUEUE_DELAY = 1000		--延时1秒写入
        ,ON_FAILURE = CONTINUE	--如果发生错误,继续进行
) 
WHERE object_name = 'sysadmin' ; --只对对象名为sysadmin的活动进行记录
--记得启用审核
ALTER SERVER AUDIT [Audit-Test] WITH (STATE = ON) ; 
 结果如下:
 
 
创建服务器审核规范:
只有先创建服务器审核才能创建审核规范,规范与审核是关联的, 使用CREATE SERVER AUDIT SPECIFICATION 命令来创建服务器审核规范。下表是选项说明:
| 参数 | 说明 | 
| audit_specification_name | 关联到服务器审核的规范名称 | 
| audit_name | 与规范关联的服务器审核名称 | 
| audit_action_group_name | 与实例级别的可用审核操作关联的操作组名 | 
| STATE | 定义是否在创建之后运行 | 
下面是演示代码:
CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-Test] --服务器审核规范名 FOR SERVER AUDIT [Audit-Test] --用于关联[Audit-Test]服务器审核 ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP) ; --捕获服务器角色成员变更情况
创建数据库审核规范:
与服务器审核规范类似,但是数据库审核规范更加复杂,可以指定筛选器,对安全对象或主体进行审核。类似的,使用CREATE DATABASE AUDIT SPECIFICATION命令来创建。选项如下表:
| 参数 | 描述 | 
| audit_specification_name | 数据库审核规范的名称 | 
| audit_name | 与 服务器审核 关联的名称 | 
| action | 需要审核的操作 | 
| audit_action_group_name | 数据库层面需要审核的操作组名 | 
| class | 安全对象的类名 | 
| securable | 需要被审核的安全对象 | 
| principal | 需要被审核的安全主体 | 
| STATE | 指定是否创建后运行 | 
下面是演示代码:
USE AdventureWorks2017 GO --创建数据库审核规范名 CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-AdventureWorks2017] FOR SERVER AUDIT [Audit-Test] --关联到服务器审核[Audit-Test] ADD (DELETE ON OBJECT::Person.Person BY public) --捕获审核public角色成员(即所有用户)发出的对Person.Person表的删除操作 WITH (STATE = ON) ;--创建后运行注意数据库审核要在用USE库名来指定数据库,而服务器审核要用USE MASTER。完成后,可以看到如下图所示:
 
 
 
至此,创建案例已经基本完成,由于组合很多,无法一一演示,读者可以自行尝试。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。