CREATE SERVER AUDIT (Transact-SQL)

使用 SQL Server Audit 创建服务器审核对象。 有关详细信息,请参阅SQL Server 审核(数据库引擎)

适用范围:SQL Server(SQL Server 2008 到当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

CREATE SERVER AUDIT audit_name
{
    TO { [ FILE (<file_options> [ , ...n ] ) ] | APPLICATION_LOG | SECURITY_LOG }
    [ WITH ( <audit_options> [ , ...n ] ) ] 
    [ WHERE <predicate_expression> ]
}
[ ; ]

<file_options>::=
{
        FILEPATH = 'os_file_path'
    [ , MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
    [ , { MAX_ROLLOVER_FILES = { integer | UNLIMITED } } | { MAX_FILES = integer } ]
    [ , RESERVE_DISK_SPACE = { ON | OFF } ] 
}

<audit_options>::=
{
    [   QUEUE_DELAY = integer ]
    [ , ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION } ]
    [ , AUDIT_GUID = uniqueidentifier ]
}

<predicate_expression>::=
{
    [NOT ] <predicate_factor> 
    [ { AND | OR } [NOT ] { <predicate_factor> } ] 
    [,...n ]
}

<predicate_factor>::= 
    event_field_name { = | < > | ! = | > | > = | < | < = } { number | ' string ' }

参数

  • TO { FILE | APPLICATION_LOG | SECURITY_LOG }
    确定审核目标的位置。 选项包括二进制文件、Windows 应用程序日志或 Windows 安全日志。 必须在 Windows 中配置其他设置,才可将 SQL Server 写入到 Windows 安全日志。 有关详细信息,请参阅将 SQL Server 审核事件写入安全日志

  • FILEPATH ='os_file_path'
    审核日志的路径。 文件名是基于审核名称和审核 GUID 生成的。

  • MAXSIZE = { max_size }
    指定审核文件可增大到的最大大小。 max_size 值必须是后跟 MB、GB、TB 或 UNLIMITED 的整数。 为 max_size 指定的最小大小为 2 MB,最大大小为 2,147,483,647 TB。 如果指定为 UNLIMITED,则文件将增长到磁盘变满为止。 (0 还指示 UNLIMITED。)指定一个小于 2 MB 的值将引发错误 MSG_MAXSIZE_TOO_SMALL。 默认值为 UNLIMITED。

  • MAX_ROLLOVER_FILES ={ integer | UNLIMITED }
    指定要保留在文件系统中外加当前文件的最大文件数。 MAX_ROLLOVER_FILES 值必须是整数或 UNLIMITED。 默认值为 UNLIMITED。 在审核重新开始(在 数据库引擎 的实例重新开始或者在审核被关闭后又打开时,可能会发生审核重新开始)或由于已达到 MAXSIZE 而需要新文件时,对此参数进行求值。 在对 MAX_ROLLOVER_FILES 进行求值时,如果文件的数目超出了 MAX_ROLLOVER_FILES 设置,则会删除最旧的文件。 因此,如果 MAX_ROLLOVER_FILES 的设置为 0,则每次对 MAX_ROLLOVER_FILES 设置求值时都会创建新的文件。 在对 MAX_ROLLOVER_FILES 设置求值时只会自动删除一个文件;因此,在降低 MAX_ROLLOVER_FILES 的值时,文件数目将不会缩减,除非手动删除旧文件。 可以指定的最大文件数为 2,147,483,647。

  • MAX_FILES =integer

    适用于:SQL Server 2012 到 SQL Server 2014。

    指定可创建的审核文件的最大数目。 当达到此限制时,不滚动更新到第一个文件。 在达到 MAX_FILES 限制时,导致生成附加审核事件的任何操作都将失败并报告错误。

  • RESERVE_DISK_SPACE = { ON | OFF }
    此选项会按 MAXSIZE 值为磁盘上的文件预先分配大小。 仅在 MAXSIZE 不等于 UNLIMITED 时适用。 默认值为 OFF。

  • QUEUE_DELAY =integer
    确定在强制处理审核操作之前可以经过的时间(以毫秒为单位)。 值 0 指示同步传递。 可设置的最小延迟值为 1000(1 秒),这是默认值。 最大值为 2,147,483,647(2,147,483.647 秒或者 24 天 20 小时 31 分钟 23.647 秒)。 指定无效数字将引发错误 MSG_INVALID_QUEUE_DELAY。

  • ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }
    指示在目标无法写入审核日志时写入目标的实例是应失败、继续还是停止 SQL Server。 默认值为 CONTINUE。

    • CONTINUE
      SQL Server 操作将继续。 审核记录将不会保留。 审核将继续尝试将事件记入日志,并且在故障条件得到解决后将恢复。 选择继续选项可以允许未经审核的活动,这可能违反了您的安全策略。 在数据库引擎的继续操作比维护完整审核更重要时,使用此选项。

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

    • FAIL_OPERATION
      如果数据库操作会导致审核的事件,则数据库操作将失败。 不会导致审核的事件的操作可以继续,但不会发生审核的事件。 审核将继续尝试将事件记入日志,并且在故障条件得到解决后将恢复。 在维护完整审核比对数据库引擎的完全访问权限更重要时,使用此选项。

  • AUDIT_GUID =uniqueidentifier
    为了支持数据库镜像之类的方案,审核功能需要一个与在镜像数据库中所找到的 GUID 相匹配的特定 GUID。 创建审核之后,即不能修改该 GUID。

  • predicate_expression

    适用于:SQL Server 2012 到 SQL Server 2014。

    指定用于确定是否应处理事件的谓词表达式。 谓词表达式限制在 3000 个字符,这限制了字符串参数。

  • event_field_name

    适用于:SQL Server 2012 到 SQL Server 2014。

    表示标识谓词源的事件字段的名称。 在 sys.fn_get_audit_file (Transact-SQL) 中介绍了审核字段。 除 file_name 和 audit_file_offset 之外的所有字段都可以进行审核。

  • number

    适用于:SQL Server 2012 到 SQL Server 2014。

    任何数值类型,包括 decimal。 局限性在于缺少可用物理内存,或数值过大而无法用 64 位整数表示。

  • ' string '

    适用于:SQL Server 2012 到 SQL Server 2014。

    进行谓词比较所需的 ANSI 字符串或 Unicode 字符串。 不为谓词比较函数执行隐式字符串类型转换。 传递错误类型会导致出错。

注释

服务器审核在创建之后处于禁用状态。

CREATE SERVER AUDIT 语句位于事务范围内。 如果对事务进行回滚,也将对该语句进行回滚。

权限

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

在您将审核信息保存到某一文件时,为了避免被篡改,应限制对文件位置的访问。

示例

A.创建一个以文件为目标的服务器审核

下面的示例创建一个名为 HIPPA_Audit 的服务器审核,它以二进制文件为目标,而且不带选项。

CREATE SERVER AUDIT HIPAA_Audit
    TO FILE ( FILEPATH ='\\SQLPROD_1\Audit\' );

B.创建一个带有选项且以 Windows 应用程序日志为目标的服务器审核

下面的示例创建一个名为 HIPPA_Audit 的服务器审核,它以 Windows 应用程序日志作为目标集。 每秒向队列中写入一次,在遇到故障时将关闭 SQL Server 引擎。

CREATE SERVER AUDIT HIPAA_Audit
    TO APPLICATION_LOG
    WITH ( QUEUE_DELAY = 1000,  ON_FAILURE = SHUTDOWN);

C.创建包含 WHERE 子句的服务器审核

下面的示例将创建用于一个数据库、架构和用于该示例的两个表。 名为 DataSchema.SensitiveData 的表将包含保密数据,因此,必须在审核中记录对该表的访问。 名为 DataSchema.GeneralData 的表不包含保密数据。 数据库审核规范将审核对 DataSchema 架构中所有对象的访问。 将使用 WHERE 子句创建服务器审核,该子句将服务器审核限制为仅限 SensitiveData 表。 服务器审核将假定在 C:\SQLAudit 存在一个审核文件夹。

CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
-- Create the server audit in the master database
USE master;
GO
CREATE SERVER AUDIT AuditDataAccess
    TO FILE ( FILEPATH ='C:\SQLAudit\' )
    WHERE object_name = 'SensitiveData' ;
GO
ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO
-- Create the database audit specification in the TestDB database
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess] 
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO

请参阅

参考

ALTER SERVER AUDIT (Transact-SQL)

DROP SERVER AUDIT (Transact-SQL)

CREATE SERVER AUDIT SPECIFICATION (Transact-SQL)

ALTER SERVER AUDIT SPECIFICATION (Transact-SQL)

DROP SERVER AUDIT SPECIFICATION (Transact-SQL)

CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)

DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)

ALTER AUTHORIZATION (Transact-SQL)

sys.fn_get_audit_file (Transact-SQL)

sys.server_audits (Transact-SQL)

sys.server_file_audits (Transact-SQL)

sys.server_audit_specifications (Transact-SQL)

sys.server_audit_specification_details (Transact-SQL)

sys.database_audit_specifications (Transact-SQL)

sys.database_audit_specification_details (Transact-SQL)

sys.dm_server_audit_status (Transact-SQL)

sys.dm_audit_actions (Transact-SQL)

sys.dm_audit_class_type_map (Transact-SQL)

概念

创建服务器审核和服务器审核规范