接上文: 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。完成后,可以看到如下图所示:
至此,创建案例已经基本完成,由于组合很多,无法一一演示,读者可以自行尝试。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。