CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

适用于:SQL ServerAzure 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 ]  
}  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

audit_specification_name
是审核规范的名称。

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

audit_action_specification
是主体对安全对象执行的应记录到审核中的操作的规范。

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

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

class
是安全对象上的类名(如果适用)。

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

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

WITH ( STATE = { ON | OFF } )
允许或禁止审核收集此审核规范的记录。

备注

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

权限

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

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

示例

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

下面的示例针对 AdventureWorks2022 数据库中的 HumanResources.EmployeePayHistory 表,创建名为 Payrole_Security_Audit 的服务器审核,然后创建可由 public 数据库角色的任何成员审核 SELECTINSERT 语句的数据库审核规范,其名称为 Payrole_Security_Audit。 这样做的效果是,每个用户都会被审核,因为每个用户始终都是角色 public 的成员。

USE master ;  
GO  
-- Create the server audit.  
CREATE SERVER AUDIT Payrole_Security_Audit  
    TO FILE ( FILEPATH =   
'D:\SQLAudit\' ) ;  -- make sure this path exists
GO  
-- Enable the server audit.  
ALTER SERVER AUDIT Payrole_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 Payrole_Security_Audit  
ADD (SELECT , INSERT  
     ON HumanResources.EmployeePayHistory BY public )  
WITH (STATE = ON) ;  
GO  

B. 审核特定数据库角色“sales”架构中所有对象上的任何 DML(INSERT、UPDATE 或 DELETE)

下面的示例针对 DataModification_Security_Audit 数据库中 Audit_Data_Modification_On_All_Sales_Tables 架构的所有对象,创建名为 INSERT 的服务器审核,然后创建可由新数据库角色 UPDATE 中的用户审核 DELETESalesUKSales 语句的数据库审核规范,其名称为 AdventureWorks2022

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  

另请参阅

CREATE SERVER AUDIT (Transact-SQL)
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)
创建服务器审核和服务器审核规范