CREATE SERVER AUDIT(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

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

Transact-SQL 구문 표기 규칙

Syntax

CREATE SERVER AUDIT audit_name
{
    TO { [ FILE (<file_options> [ , ...n ] ) ] | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }
    [ 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 ]
    [ , OPERATOR_AUDIT = { ON | OFF } ]
}

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

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

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

TO { FILE | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }

감사 대상의 위치를 결정합니다. 이 옵션은 이진 파일, Windows 애플리케이션 로그 또는 Windows 보안 로그입니다. SQL Server는 Windows에서 추가 설정을 구성하지 않고는 Windows 보안 로그에 쓸 수 없습니다. 자세한 내용은 보안 로그에 SQL Server 감사 이벤트 쓰기를 참조 하세요.

대상은 URL SQL Server에 대해 지원되지 않습니다.

Important

Azure SQL Managed Instance에서 SQL Audit는 서버 수준에서 작동합니다. 위치는 URL 또는 EXTERNAL_MONITOR만 될 수 있습니다.

FILEPATH = 'os_file_path'

감사 로그의 경로입니다. 파일 이름은 감사 이름과 감사 GUID를 기준으로 생성됩니다. 이 경로가 유효하지 않으면 감사가 만들어지지 않습니다.

FILEPATH 대상은 Azure SQL Managed Instance에 대해 지원되지 않습니다. 대신 사용해야 PATH 합니다.

MAXSIZE = max_size

감사 파일이 증가할 수 있는 최대 크기를 지정합니다. max_size 값은 정수 뒤에 MB, GB, TB 또는 UNLIMITED. max_size에 대해 지정할 수 있는 최소 크기는 2MB이고 최대 크기는 2,147,483,647 TB입니다. UNLIMITED 지정되면 디스크가 가득 찼을 때까지 파일이 증가합니다. (0 또한 .)을 나타냅니다 UNLIMITED. 2MB보다 낮은 값을 지정하면 오류가 MSG_MAXSIZE_TOO_SMALL발생합니다. 기본값은 UNLIMITED입니다.

MAXSIZE 대상은 Azure SQL Managed Instance에 대해 지원되지 않습니다.

MAX_ROLLOVER_FILES = { 정수 | UNLIMITED }

현재 파일 외에 파일 시스템에 보관할 최대 파일 수를 지정합니다. 값은 MAX_ROLLOVER_FILES 정수 또는 UNLIMITED.이어야 합니다. 기본값은 UNLIMITED입니다. 이 매개 변수는 감사가 다시 시작될 때마다(데이터베이스 엔진 인스턴스가 다시 시작되거나 감사가 꺼진 후 다시 켜졌을 때 발생할 수 있습니다) 또는 새 파일에 도달했기 때문에 MAXSIZE 새 파일이 필요할 때 평가됩니다. MAX_ROLLOVER_FILES 평가되는 경우 파일 수가 설정을 초과 MAX_ROLLOVER_FILES 하면 가장 오래된 파일이 삭제됩니다. 따라서 설정이 0이면 설정 MAX_ROLLOVER_FILES 이 평가될 때마다 MAX_ROLLOVER_FILES 새 파일이 만들어집니다. 설정이 평가될 때 MAX_ROLLOVER_FILES 하나의 파일만 자동으로 삭제되므로 값 MAX_ROLLOVER_FILES 이 감소하면 이전 파일이 수동으로 삭제되지 않는 한 파일 수가 줄어들지 않습니다. 지정할 수 있는 최대 파일 수는 2,147,483,647입니다.

MAX_ROLLOVER_FILES 는 Azure SQL Managed Instance에 대해 지원되지 않습니다.

MAX_FILES = 정수

적용 대상: SQL Server 2012(11.x) 이상

만들 수 있는 최대 감사 파일 수를 지정합니다. 제한에 도달하면 첫 번째 파일로 롤오버하지 않습니다. 제한에 MAX_FILES 도달하면 추가 감사 이벤트가 생성되는 모든 작업이 오류와 함께 실패합니다.

RESERVE_DISK_SPACE = { ON | OFF }

이 옵션은 디스크의 파일을 값으로 미리 할당합니다 MAXSIZE . 같지 않은 UNLIMITED경우에만 MAXSIZE 적용됩니다. 기본값은 OFF입니다.

RESERVE_DISK_SPACE 대상은 Azure SQL Managed Instance에 대해 지원되지 않습니다.

QUEUE_DELAY = 정수

감사 동작이 강제 처리되기 전까지 허용되는 시간(밀리초)을 지정합니다. 값이 0인 경우 동기 배달을 나타냅니다. 최소 설정 가능한 쿼리 지연 값은 기본값인 1000 (1초)입니다. 최대값은 2147483647 (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

SQL Server가 어떤 이유로든 감사 대상에 데이터를 쓰지 못하면 SQL Server의 인스턴스가 강제 종료됩니다. CREATE SERVER AUDIT 문을 실행하는 로그인은 SQL Server 내에 SHUTDOWN 권한이 있어야 합니다. SHUTDOWN 권한이 실행중인 로그인에서 나중에 취소된 경우에도 종료 동작은 지속됩니다. 사용자에게 이 권한이 없으면 문이 실패하고 감사가 만들어지지 않습니다. 감사 실패로 인해 시스템 무결성 또는 보안이 손상될 수 있는 경우 이 옵션을 사용하십시오. 자세한 내용은 SHUTDOWN을 참조하세요.

FAIL_OPERATION

적용 대상: SQL Server 2012(11.x) 이상

감사된 이벤트를 발생시키는 데이터베이스 동작이 실패합니다. 감사된 이벤트를 발생시키는 작업은 계속할 수 있지만 감사된 이벤트는 발생할 수 없습니다. 감사는 계속해서 이벤트 기록을 시도하며 실패 조건이 해결되면 재개됩니다. 데이터베이스 엔진에 대한 모든 권한을 얻는 것보다 전체 감사를 유지 관리하는 것이 더 중요하면 이 옵션을 사용하십시오.

AUDIT_GUID = uniqueidentifier

데이터베이스 미러링과 같은 시나리오를 지원하려면 미러된 데이터베이스에서 찾은 GUID와 일치하는 특정 GUID가 감사에 필요합니다. 감사를 만든 후에는 GUID를 수정할 수 없습니다.

OPERATOR_AUDIT

적용 대상: Azure SQL Managed Instance만 해당합니다.

감사가 지원 요청 중에 서버에 액세스해야 하는 경우 Microsoft 지원 엔지니어 작업을 캡처하는지 여부를 나타냅니다.

predicate_expression

적용 대상: SQL Server 2012(11.x) 이상 버전.

이벤트 처리 여부를 확인하는 데 사용할 조건자 식을 지정합니다. 조건자 식은 문자열 인수를 제한하는 3,000자로 제한됩니다.

event_field_name

적용 대상: SQL Server 2012(11.x) 이상 버전.

조건자 원본을 식별하는 이벤트 필드의 이름입니다. 감사 필드는 sys.fn_get_audit_file(Transact-SQL)에 설명되어 있습니다. file_name, audit_file_offsetevent_time을 제외한 모든 필드를 필터링할 수 있습니다.

참고 항목

action_id 필드와 class_type 필드는 varcharsys.fn_get_audit_file형식이지만 필터링을 위한 조건자 원본인 경우에만 숫자와 함께 사용할 수 있습니다. class_type과 함께 사용할 값의 목록을 얻으려면 다음 쿼리를 실행합니다.

SELECT spt.[name], spt.[number]
FROM   [master].[dbo].[spt_values] spt
WHERE  spt.[type] = N'EOD'
ORDER BY spt.[name];

number

적용 대상: SQL Server 2012(11.x) 이상 버전.

10진수를 포함한 모든 숫자 형식입니다. 단, 사용 가능한 실제 메모리가 부족한 경우나 값이 너무 커서 64비트 정수로 표현할 수 없는 숫자는 제외됩니다.

'string'

적용 대상: SQL Server 2012(11.x) 이상 버전.

조건자 비교에 필요한 ANSI 또는 유니코드 문자열입니다. 조건자 비교 함수에 대해서는 암시적 문자열 유형 변환이 수행되지 않습니다. 잘못된 유형을 전달하면 오류가 발생합니다.

설명

서버 감사가 만들어지면 사용할 수 없는 상태입니다.

문이 CREATE SERVER AUDIT 트랜잭션의 범위에 있습니다. 트랜잭션이 롤백되면 이 문도 롤백됩니다.

사용 권한

서버 감사를 만들거나 변경하거나 삭제하려면 보안 주체에 사용 권한이 필요합니다 ALTER ANY SERVER AUDITCONTROL SERVER .

감사 정보를 파일에 저장하는 경우 변조를 방지하려면 파일 위치에 대한 액세스를 제한합니다.

예제

A. 파일 대상을 사용하여 서버 감사 만들기

다음 예에서는 이진 파일을 대상으로 사용하고 옵션 없이 HIPAA_Audit라는 서버 감사를 만듭니다.

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

B. 옵션을 사용하여 Windows 애플리케이션 로그 대상을 사용하여 서버 감사 만들기

다음 예에서는 Windows 애플리케이션 로그에 대한 대상 집합을 사용하여 HIPAA_Audit라는 서버 감사를 만듭니다. 큐가 1초마다 기록되고 실패 시 SQL Server 엔진을 종료합니다.

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

C. WHERE 절을 포함하는 서버 감사 만들기

다음 예에서는 데이터베이스 하나, 스키마 하나 및 테이블 두 개를 만듭니다. DataSchema.SensitiveData라는 테이블은 기밀 데이터를 포함하며, 테이블에 대한 액세스가 감사에 기록되어야 합니다. 명명된 DataSchema.GeneralData 테이블에는 기밀 데이터가 포함되지 않습니다. 데이터베이스 감사 사양은 DataSchema 스키마의 모든 개체에 대한 액세스를 감사합니다. 서버 감사를 SensitiveData 테이블로만 제한하는 WHERE 절을 사용하여 서버 감사를 만듭니다. 서버 감사에서는 감사 폴더가 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