다음을 통해 공유


CREATE DATABASE AUDIT SPECIFICATION(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

SQL Server Audit 기능을 사용하여 데이터베이스 감사 사양 개체를 만듭니다. 자세한 내용은 SQL Server Audit(데이터베이스 엔진)을 참조하세요.

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

감사에 기록해야 하는 보안 주체의 보안 개체에 대한 작업 사양입니다.

작업

하나 이상의 데이터베이스 수준 감사 가능 작업의 이름입니다. 감사 동작의 목록에 대해서는 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 코드 샘플은 AdventureWorks2022 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. 데이터베이스 감사 주체에 대해 테이블에서 SELECT 및 INSERT 감사

다음 예제에서는 호출 Payroll_Security_Audit 된 서버 감사를 만든 다음 테이블에 대해 공용 데이터베이스 역할의 멤버가 감사 SELECTINSERT 문을 호출 Payroll_Security_Audit 하는 데이터베이스 감사 사양을 HumanResources.EmployeePayHistory 만듭니다. 모든 사용자는 항상 공용 역할의 멤버이기 때문에 모든 사용자가 감사됩니다.

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 된 서버 감사를 만든 다음, 스키마의 모든 개체에 대해 새 데이터베이스 역할SalesUK의 사용자가 감사UPDATEINSERT하고 DELETE 문을 감사하는 데이터베이스 Audit_Data_Modification_On_All_Sales_Tables 감사 사양을 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: