sqlserver审计、服务器与数据库审核规范

一、服务器审核

1. 服务器审核介绍

SQL Server 2008 引入了服务器审核功能,可以对服务器级别和数据库级别事件组和事件进行审核。

SQL Server 的审核级别有若干种,具体取决于安装环境的政府要求或标准要求。SQL Server 审核提供若干必需的工具和进程,用于启用、存储和查看对各个服务器和数据库对象的审核。

SQL Server 的所有版本均支持服务器级审核。数据库级审核限制为企业版、开发版和评估版等版本。

若要创建、更改或删除服务器审核,主体需要拥有 ALTER ANY SERVER AUDIT 或 CONTROL SERVER 权限。


2. 审核目标

审核由零个或多个审核操作项组成,这些操作项会记录到审核“目标”。审核目标可以是以下三种之一:

(1) 二进制文件:日志将保存到指定的文件夹。
(2) Windows 应用程序事件日志:日志将写入 Windows 的“应用程序”中。
(3) Windows 安全事件日志。:日志将写入 Windows 的“安全”中。

将 SQL Server 服务器审核写入 Windows 安全日志有两个关键要求。

必须配置“审核对象访问”设置以捕获事件。在 Windows Server 2008 等操作系统中,“以管理员身份”打开命令提示符,运行以下命令:
auditpol /set /subcategory:"application generated" /success:enable /failure:enable

二、创建审核

“SQL Server 审核”对象收集单个服务器实例或数据库级操作和操作组以进行监视。这种审核处于 SQL Server 实例级别。每个 SQL Server 实例可以具有多个审核。

1. 新建服务器审核

1) 可视化操作

在 SSMS 中展开“安全性”文件夹,右键单击“审核”,然后在右键菜单中选择“新建审核”。


# 1.常规选项
在“常规”选项卡上依次配置以下选项。
(1)审核名称
审核的名称。这是在创建新审核时自动生成的,但是您可以对其进行编辑。

(2)队列延迟(毫秒)
指定在强制处理审核操作之前可以等待的时间(毫秒)。值 0 指示同步传递。默认的最小值为 1000(即 1 秒)。最大值为 2,147,483,647(约 25 天)。

(3)在审核日志失败时
在写入审核日志时可能会遇到故障导致写入失败,此选项用于指定在写入失败时应如何应对。
--------
a. 继续
SQL Server 操作将继续。审核记录将不会保留。审核将继续尝试将事件记入日志,并且在故障条件得到解决后将恢复。选择“继续”选项可以允许未经审核的活动,这可能违反了您的安全策略。在数据库引擎的继续操作比维护完整审核更重要时,选择此选项。这是默认选项。

b. 关闭服务器
在写入目标的服务器实例无法将数据写入审核目标时,强制关闭服务器。发出此命令的登录名必须具有 SHUTDOWN 权限。如果该登录名没有此权限,则该函数将失败并将引发错误消息。将不会发生审核的事件。在审核失败可能损害系统的安全或完整性时,选择此选项。

c. 失败操作
在 SQL Server Audit 无法写入审核日志的情况下,如果数据库操作将导致审核的事件,则此选项将导致数据库操作失败。将不会发生审核的事件。不会导致审核的事件的操作可以继续。审核将继续尝试将事件记入日志,并且在故障条件得到解决后将恢复。在维护完整审核比对数据库引擎的完全访问权限更重要时,选择此选项。

'在审核处于失败状态时,专用管理员连接可继续执行审核的事件。'
-------

(4)审核目标
指定数据的审核目标。可用选项包括二进制文件、Windows 应用程序日志或 Windows 安全日志。

当“审核目标”是文件时,指定审核数据写入的文件夹所在的位置,然后在“审核文件最大限制”选项中指定是否限制审核文件的数目。

◆ 在选中了“最大滚动更新文件数”下的“无限制”复选框后,可创建的审核文件数不受任何限制。

◆ 如果选中了“最大滚动更新文件数”,同时取消“无限制”复选框,则可创建的审核文件数目受到“文件数”选项的限制。

◆ 选中“最大文件数”,则指定在达到“文件数”所限制的数量时,导致生成附加审核事件的任何操作都将失败并报告错误。

“文件数”最高为 2,147,483,647。

可以为审核文件设置“最大文件大小”。可以指定 1024 MB 至 2,147,483,647 TB 之间的值。选中下方的“无限制”复选框将不会对文件大小施加限制。默认情况下,“无限制”复选框为选中状态。

“保留磁盘空间”复选框可以指定在磁盘上预先分配与指定的最大文件大小相等的空间。只有在“最大文件大小”下未选中“无限制”复选框的情况下,才能使用此设置。默认情况下,不选中此复选框。

# 2. 筛选器
在“筛选器”选项卡上,可以对服务器审核输入一个谓词或 WHERE 子句,以便指定在“常规”页上未提供的附加选项。用小括号将该谓词括起来,例如 (object_name = 'EmployeesTable')。

2) 语句创建

  • T-SQL 语法创建示例如下:
# 创建一个审核,并指定其文件保存目录和参数
CREATE SERVER AUDIT [审核名称a]
TO FILE (FILEPATH = N'E:\MSSQL\Audit',MAXSIZE = 0 MB,MAX_ROLLOVER_FILES = 2147483647,RESERVE_DISK_SPACE = OFF)
WITH
(QUEUE_DELAY = 1000,ON_FAILURE = CONTINUE)
GO

3) 启用审核

定义审核时,仅指定结果的输出位置,这是审核的目标位置。新创建的审核将默认处于“禁用”状态,因此不会自动审核任何操作。启用审核后,审核目标将从审核接收数据。

T-SQL 语法示例如下:
ALTER  SERVER AUDIT [审核名称a] WITH (STATE = ON);

2. 服务器审核规范

1) 可视化操作

  • 1).在 SSMS 中展开“安全性”,右键单击“服务器审核规范”文件夹,然后选择“新建服务器审核规范”。
  • 2).在“名称”中为新建的服务器审核规范指定一个名称。这是在创建新服务器审核规范时自动生成的,但是您可以对其进行编辑。
  • 3).在“审核”列表中选择一个现有的服务器审核的名称。
  • 4).在“操作”中指定要捕获的服务器级别审核操作组和审核操作。

2) 语法创建

  • T-SQL 语法示例如下:
# 创建一个审核规范名称为'Tabel_change',规则为SCHEMA_OBJECT_CHANGE_GROUP

USE [master]
GO

CREATE SERVER AUDIT SPECIFICATION [Tabel_change]
FOR SERVER AUDIT [审核名称a] ADD (SCHEMA_OBJECT_CHANGE_GROUP)
GO

3) 启用审核规范

# T-SQL 语法启动如下:
ALTER SERVER AUDIT SPECIFICATION [Tabel_change] WITH (STATE = ON);

4) 审核规范操作组

服务器审核规范用于对服务器级别和数据库级别事件组以及单个事件进行审核

针对服务器级别的审核,使用了“操作组”的概念,这是类似于 SQL Server 安全审核事件类的操作。下表介绍了常用的服务器级审核操作组。

操作组名称 说明
BACKUP_RESTORE_GROUP 发出备份或还原命令时,将引发此事件。
DATABASE_CHANGE_GROUP 创建、更改或删除数据库时将引发此事件。
DATABASE_OBJECT_ACCESS_GROUP 访问数据库对象(如消息类型、程序集和协定)时将引发此事件,这可能导致生成大量审核记录。
DATABASE_OBJECT_CHANGE_GROUP 针对数据库对象(如架构)执行 CREATE、ALTER 或 DROP 语句时将引发此事件,这可能导致生成大量审核记录。
FAILED_LOGIN_GROUP 指示主体尝试登录到 SQL Server,但是失败。此类中的事件由新连接引发或由连接池中重用的连接引发。
LOGOUT_GROUP 指示主体已注销 SQL Server。此类中的事件由新连接引发或由连接池中重用的连接引发。
SCHEMA_OBJECT_ACCESS_GROUP 每次在架构中使用对象权限时,都将引发此事件。
SCHEMA_OBJECT_CHANGE_GROUP 针对架构执行 CREATE、ALTER 或 DROP 操作时将引发此事件。
SERVER_OBJECT_CHANGE_GROUP 针对服务器对象执行 CREATE、ALTER 或 DROP 操作时将引发此事件。

服务器级别操作组涵盖了整个 SQL Server 实例中的操作。例如,如果将相应操作组添加到服务器审核规范中,则将记录任何数据库中的任何架构对象访问检查。

服务器级别的操作不允许对数据库级别的操作进行详细筛选。实现详细操作筛选需要数据库级别的审核。


3. 指定数据库审核规范

在数据库级别创建审核规范,可以实现数据库级别的审核。具有 ALTER ANY DATABASE AUDIT 权限的用户可以创建数据库审核规范并将其绑定到任何审核。创建数据库审核规范后,具有 CONTROL SERVER 或 ALTER ANY DATABASE AUDIT 权限的主体或 sysadmin 帐户即可查看该规范。

数据库级别审核的操作类型可以是操作组,也可以是单个的操作(SELECT、UPDATE、INSERT、DELETE、EXECUTE、RECEIVE 和 REFERENCES 等)。

可以在 SSMS 中查看“审核”的日志,或者使用系统函数。
数据库级别的审核操作不适用于列。

1) 创建数据库审核规范

  • 注意事项
    1.数据库审核规范位于创建它们的数据库(tempdb 系统数据库除外)中。
    2.对于单个数据库而言,每一个数据库审核规范都需要绑定一个“审核”。如果某个数据库需要创建多个审核规范,那么必须绑定到多个“审核”。

  • 可视化创建
    在 SSMS 中展开数据库的“安全性”,右键单击“数据库审核规范”,选择“新建数据库审核规范”。

“对象类”可以是 DATABASE、SCHEME 或者 OBJECT。如果选择了“OBJECT”,则可以对表、视图、存储过程、函数、扩展存储过程、队列、同义词等进行的特定操作进行审核。单击“对象名称”下拉列表右侧的浏览按钮,出现“选择对象”对话框。

----注意----
'若要审核服务器范围的对象,请使用 master 数据库中的数据库审核规范。'

2) 语句创建

USE [数据库名]
GO

CREATE DATABASE AUDIT SPECIFICATION [审核规范名]
FOR SERVER AUDIT [Audit-To-File]
ADD (SELECT ON OBJECT::[dbo].[Customer] BY [public]),
ADD (INSERT ON OBJECT::[dbo].[Customer] BY [public]),
ADD (DELETE ON OBJECT::[dbo].[Customer] BY [public]),
ADD (UPDATE ON OBJECT::[dbo].[Customer] BY [public])
GO

3) 启用规范

T-SQL 语法示例如下:
ALTER DATABASE AUDIT SPECIFICATION [审核规范名] WITH (STATE = ON);

三、查看审核

1. 注意事项

1. 建议通过使用日志文件查看器查看审核日志。在某些场景中,例如创建自动监视系统,则可以使用 sys.fn_get_audit_file 函数直接读取审核文件中的信息。直接读取该文件将以略有不同的(未处理的)格式返回数据。

2. SQL Server 审核可以为审核记录中的字符字段存储 4000 个数据字符。当可审核操作返回的 additional_information 和 statement 值返回的字符超过 4000 个时,会将多个记录行写入到单个审核操作的审核报表中以记录此数据。这些记录行只有 sequence_no 值和 statement 值不同,所有其他字段在每一行中是重复的。

3. 查看审核结果语句:
SELECT * FROM sys.fn_get_audit_file('E:\MSSQL\Audit\*',null,null)

2. 使用实例

SELECT * FROM fn_get_audit_file('E:\审核名_*.sqlaudit',default,default);

或者过滤部分信息
SELECT event_time,succeeded,session_server_principal_name,server_instance_name,database_name,[schema_name],[object_name],statement 
FROM 
fn_get_audit_file('E:\审核名_*.sqlaudit',default,default);


Copyright © 2009 - Now . XPBag.com . All rights Reserved.
夜心的小站 » sqlserver审计、服务器与数据库审核规范

提供最优质的资源集合

立即查看 了解详情