CREATE SERVER AUDIT(Transact-SQL)

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

항목 링크 아이콘 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 Audit 이벤트 쓰기를 참조하십시오.

  • FILEPATH ='os_file_path'
    감사 로그의 경로입니다. 파일 이름은 감사 이름과 감사 GUID를 기준으로 생성됩니다.

  • MAXSIZE = { max_size }
    감사 파일이 증가할 수 있는 최대 크기를 지정합니다. max_size 값은 정수여야 하며 뒤에 MB, GB, TB 또는 UNLIMITED가 와야 합니다. max_size에 대해 지정할 수 있는 최소 크기는 2MB이고 최대 크기는 2,147,483,647TB입니다. UNLIMITED를 지정하는 경우 디스크가 꽉 찰 때까지 파일이 증가합니다. 0도 UNLIMITED를 나타냅니다. 2MB보다 작은 값을 지정하면 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
    만들 수 있는 최대 감사 파일 수를 지정합니다. 이 제한에 도달하는 경우 첫 파일로 롤오버하지 않습니다. 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 작업을 계속합니다. 감사 레코드는 보존되지 않습니다. 감사는 계속해서 이벤트 기록을 시도하며 실패 조건이 해결되면 재개됩니다. CONTINUE 옵션을 선택하면 감사되지 않는 작업이 허용되어 보안 정책을 위반할 수 있습니다. 전체 감사를 유지 관리하는 것보다 데이터베이스 엔진의 작업을 계속하는 것이 더 중요하면 이 옵션을 사용하십시오.

    • SHUTDOWN
      대상에 쓰기 작업을 수행하는 서버 인스턴스가 감사 대상에 데이터를 쓰지 못할 경우 서버를 강제 종료합니다. 이 함수를 실행하는 로그인에는 SHUTDOWN 권한이 있어야 합니다. 이 권한이 없으면 이 함수가 실패하고 오류 메시지가 표시됩니다. 감사된 이벤트가 발생하지 않습니다. 감사 실패로 인해 시스템 무결성 또는 보안이 손상될 수 있는 경우 이 옵션을 사용하십시오.

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

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

  • predicate_expression
    이벤트 처리 여부를 확인하는 데 사용할 조건자 식을 지정합니다. 조건자 식은 3000자로 제한되며 문자열 인수를 제한합니다.

  • event_field_name
    조건자 원본을 식별하는 이벤트 필드의 이름입니다. 감사 필드에 대한 설명은 sys.fn_get_audit_file(Transact-SQL)에 나와 있습니다. file_name 및 audit_file_offset을 제외한 모든 필드를 감사할 수 있습니다.

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

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

주의

서버 감사를 처음 만들 때는 사용할 수 없는 상태입니다.

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

사용 권한

서버 감사를 생성, 변경 또는 삭제하려면 보안 주체에게 ALTER ANY SERVER AUDIT 또는 CONTROL SERVER 권한이 있어야 합니다.

감사 정보를 파일에 저장할 때 변조를 방지하기 위해 파일 위치에 대한 액세스를 제한합니다.

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

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

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

2.Windows 응용 프로그램 로그 대상과 옵션을 사용하여 서버 감사 만들기

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

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

3.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

참고 항목

참조

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)

개념

서버 감사 및 서버 감사 사양 만들기