CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

使用 SQL Server 审核功能创建数据库审核规范对象。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)

Transact-SQL 语法约定

语法

CREATE DATABASE AUDIT SPECIFICATION audit_specification_name
{
    FOR SERVER AUDIT audit_name
        [ ADD (
            { <audit_action_specification> | audit_action_group_name }
            [ , ...n ] )
        ]
        [ WITH ( STATE = { ON | OFF } ) ]
}
[ ; ]
<audit_action_specification>::=
{
    action [ , ...n ] ON [class::]securable BY principal [ , ...n ]
}

参数

audit_specification_name

审核规范的名称。

audit_name

应用此规范的审核的名称。

audit_action_specification

应记录在审核中的主体对安全对象的操作规范。

action

一个或多个数据库级可审核操作的名称。 要获取审核操作列表,请参阅 SQL Server 审核操作组和操作

audit_action_group_name

一个或多个数据库级可审核操作组的名称。 要获取审核操作组列表,请参阅 SQL Server 审核操作组和操作

class

安全对象的类名称(如果适用)。

securable

要对其应用审核操作或审核操作组的数据库中的表、视图或其他安全对象。 有关详细信息,请参阅 Securables

principal

要对其应用审核操作或审核操作组的数据库主体的名称。 若要审核所有数据库主体,请使用 公共 数据库主体。 有关详细信息,请参阅主体(数据库引擎)

WITH ( STATE = { ON | OFF } )

允许或禁止审核收集此审核规范的记录。

备注

数据库审核规范是驻留在给定数据库中的非安全对象。 数据库审核规范在创建之后处于禁用状态。

权限

拥有 ALTER ANY DATABASE AUDIT 权限的用户可以创建数据库审核规范并将其绑定到任何审核。

创建数据库审核规范后,具有 CONTROL SERVER 权限或 sysadmin 帐户的用户可以查看该规范。

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

A. 审核任何数据库主体的表上的 SELECT 和 INSERT

以下示例为表创建一个调用Payroll_Security_Audit的服务器审核,然后创建一个数据库审核规范,HumanResources.EmployeePayHistory该规范由Payroll_Security_Audit公共数据库角色的任何成员进行审核SELECTINSERT语句。 审核每个用户,因为每个用户始终是公共角色的成员

USE master;
GO

-- Create the server audit.
CREATE SERVER AUDIT Payroll_Security_Audit
TO FILE (FILEPATH = 'D:\SQLAudit\'); -- make sure this path exists
GO

-- Enable the server audit.
ALTER SERVER AUDIT Payroll_Security_Audit
WITH (STATE = ON);
GO

-- Move to the target database.
USE AdventureWorks2022;
GO

-- Create the database audit specification.
CREATE DATABASE AUDIT SPECIFICATION Audit_Pay_Tables
FOR SERVER AUDIT Payroll_Security_Audit ADD (
    SELECT, INSERT ON HumanResources.EmployeePayHistory BY PUBLIC
)
WITH (STATE = ON);
GO

B. 审核特定数据库角色架构中所有对象的任何数据修改

以下示例为架构中的所有对象创建一个调用DataModification_Security_Audit的服务器审核,然后创建一个数据库Audit_Data_Modification_On_All_Sales_Tables审核规范,该规范称为审核INSERTUPDATEDELETE用户在新的数据库角色SalesUK中的语句。Sales

USE master;
GO

-- Create the server audit.
-- Change the path to a path that the SQLServer Service has access to.
CREATE SERVER AUDIT DataModification_Security_Audit
TO FILE (FILEPATH = 'D:\SQLAudit\'); -- make sure this path exists
GO

-- Enable the server audit.
ALTER SERVER AUDIT DataModification_Security_Audit
WITH (STATE = ON);
GO

-- Move to the target database.
USE AdventureWorks2022;
GO

CREATE ROLE SalesUK
GO

-- Create the database audit specification.
CREATE DATABASE AUDIT SPECIFICATION Audit_Data_Modification_On_All_Sales_Tables
FOR SERVER AUDIT DataModification_Security_Audit ADD (
    INSERT, UPDATE, DELETE ON SCHEMA::Sales BY SalesUK
)
WITH (STATE = ON);
GO

服务器审核规范:

数据库审核规范:

目录视图和 DMV: