SQL Server Audit(데이터베이스 엔진)

SQL Server 데이터베이스 엔진 인스턴스 또는 개별 데이터베이스를 감사할 때는 데이터베이스 엔진에서 발생하는 이벤트를 추적 및 기록합니다. SQL Server Audit에서는 서버 수준 이벤트에 대한 서버 감사 사양과 데이터베이스 수준 이벤트에 대한 데이터베이스 감사 사양을 포함하는 서버 감사를 생성할 수 있습니다. 감사된 이벤트는 이벤트 로그 또는 감사 파일에 쓸 수 있습니다.

SQL Server의 감사는 설치에 대한 정부 또는 표준 요구 사항에 따라 여러 개의 수준이 있습니다. SQL Server Audit에서는 다양한 서버 및 데이터베이스 개체에 대한 감사를 사용 및 저장하거나 보는 데 필요한 도구와 프로세스를 제공합니다.

인스턴스별 서버 감사 동작 그룹을 기록할 수 있으며 데이터베이스별 데이터베이스 감사 동작 그룹 또는 데이터베이스 감사 동작을 기록할 수 있습니다. 감사 가능한 동작이 발생할 때마다 감사 이벤트가 발생합니다.

모든 버전의 SQL Server는 서버 수준 감사를 지원합니다. 데이터베이스 수준 감사는 Enterprise, Developer 및 Evaluation 버전에서만 지원됩니다. 자세한 내용은 SQL Server 2012 버전에서 지원하는 기능을 참조하십시오.

SQL Server Audit 구성 요소

감사는 특정 서버 동작 또는 데이터베이스 동작 그룹에 대한 여러 요소를 하나의 패키지로 결합한 것입니다. 보고서 정의가 그래픽 및 데이터 요소와 결합되어 보고서가 생성되는 것처럼 SQL Server Audit의 구성 요소가 결합되어 감사가 만들어집니다.

SQL Server Audit에서는 감사를 만들기 위해 확장 이벤트를 사용합니다. 확장 이벤트에 대한 자세한 내용은 확장 이벤트를 참조하십시오.

SQL Server Audit

SQL Server Audit 개체는 사용자가 모니터링하려는 서버 또는 데이터베이스 수준 동작 및 동작 그룹에 대한 하나의 인스턴스를 수집합니다. 감사는 SQL Server 인스턴스 수준으로 존재합니다. SQL Server 인스턴스별로 여러 개의 감사를 가질 수 있습니다.

감사를 정의할 때 결과 출력 위치를 지정하는데 이를 감사 대상이라고 합니다. 감사가 비활성 상태로 생성되면 동작을 자동으로 감사하지 않습니다. 감사가 활성화되면 감사 대상이 감사로부터 데이터를 수신합니다.

서버 감사 사양

서버 감사 사양 개체는 감사에 속해 있습니다. 서버 감사 사양과 감사는 모두 SQL Server 인스턴스 범위에서 생성되므로 감사당 하나의 서버 감사 사양을 만들 수 있습니다.

서버 감사 사양은 확장 이벤트 기능에 의해 발생되는 수많은 서버 수준 동작 그룹을 수집합니다. 감사 동작 그룹을 서버 감사 사양에 추가할 수 있습니다. 감사 동작 그룹은 미리 정의된 동작 그룹이며 데이터베이스 엔진에서 발생하는 원자성 이벤트입니다. 이러한 동작은 감사로 전달되어 대상에 기록됩니다.

서버 수준 감사 동작 그룹은 SQL Server Audit 동작 그룹 및 동작 항목에 설명되어 있습니다.

데이터베이스 감사 사양

데이터베이스 감사 사양 개체도 SQL Server Audit에 속해 있습니다. 감사의 SQL Server 데이터베이스당 하나의 데이터베이스 감사 사양을 만들 수 있습니다.

데이터베이스 감사 사양은 확장 이벤트 기능에 의해 발생되는 데이터베이스 수준 감사 동작을 수집합니다. 감사 동작 그룹 또는 감사 이벤트를 데이터베이스 감사 사양에 추가할 수 있습니다. 감사 이벤트는 SQL Server 엔진이 감사할 수 있는 원자성 동작이고, 감사 동작 그룹은 미리 정의된 동작 그룹입니다. 둘 다 SQL Server 데이터베이스 범위에 존재합니다. 이러한 동작은 감사로 전달되어 대상에 기록됩니다. 시스템 뷰와 같은 서버 범위 개체는 사용자 데이터베이스 감사 사양에 포함하지 마십시오.

데이터베이스 수준 감사 동작 그룹 및 감사 동작은 SQL Server Audit 동작 그룹 및 동작 항목에 설명되어 있습니다.

대상

감사의 결과는 파일, Windows 보안 이벤트 로그 또는 Windows 응용 프로그램 이벤트 로그 형태로 대상에 전달됩니다. 로그를 정기적으로 검토 및 보관하여 대상에 추가 레코드를 작성할 공간이 충분한지를 확인해야 합니다.

중요 정보중요

허가 받은 사용자는 Windows 응용 프로그램 이벤트 로그에 대해 읽기/쓰기 작업이 가능합니다. 응용 프로그램 이벤트 로그는 Windows 보안 이벤트 로그보다 낮은 권한을 요구하므로 Windows 보안 이벤트 로그보다 보안 수준이 낮습니다.

Windows 보안 로그에 대한 쓰기 작업을 수행하려면 SQL Server 서비스 계정을 보안 감사 생성 정책에 추가해야 합니다. 기본적으로 이 정책에는 로컬 시스템, 로컬 서비스 및 네트워크 서비스 등이 포함됩니다. 이 설정은 보안 정책 스냅인(secpol.msc)을 사용하여 구성할 수 있습니다. 또한 성공실패 모두에 대한 감사 개체 액세스 보안 정책을 설정해야 합니다. 이 설정은 보안 정책 스냅인(secpol.msc)을 사용하여 구성할 수 있습니다. Windows Vista 또는 Windows Server 2008의 경우 감사 정책 프로그램(AuditPol.exe)을 사용하여 명령줄에서 더욱 세부적인 응용 프로그램 생성 정책을 설정할 수 있습니다. Windows 보안 로그의 쓰기를 설정하는 단계에 대한 자세한 내용은 보안 로그에 SQL Server Audit 이벤트 쓰기를 참조하십시오. Auditpol.exe 프로그램에 대한 자세한 내용은 기술 자료 문서 921469, 그룹 정책을 사용하여 Windows Server 2003 또는 Windows 2000 도메인의 Windows Vista 클라이언트 컴퓨터에 대한 세부 보안 감사 설정을 구성하는 방법을 참조하십시오. Windows 이벤트 로그는 Windows 운영 체제에 전반적으로 적용됩니다. Windows 이벤트 로그에 대한 자세한 내용은 이벤트 뷰어 개요를 참조하십시오. 감사에 대해 보다 정확한 권한이 필요하다면 이진 파일 대상을 사용하십시오.

감사 정보를 파일에 저장할 때 변조를 방지하기 위해 다음과 같은 방법으로 파일 위치에 대한 액세스를 제한할 수 있습니다.

  • SQL Server 서비스 계정에는 읽기 및 쓰기 권한이 있어야 합니다.

  • Audit Administrators에게는 일반적으로 읽기 및 쓰기 권한이 필요합니다. 이 경우에는 Audit Administrators가 감사 파일을 다른 공유에 복사하고 백업하는 등의 감사 파일에 대한 관리 작업을 위한 Windows 계정이라고 가정합니다.

  • 감사 파일을 읽을 권한이 있는 Audit Readers에게는 읽기 권한이 있어야 합니다.

데이터베이스 엔진이 파일에 쓰고 있는 경우라도 권한이 있는 Windows 사용자라면 감사 파일을 읽을 수 있습니다. 데이터베이스 엔진은 파일을 배타적으로 잠그지 않으므로 다른 사용자가 읽기 작업을 수행할 수 있습니다.

데이터베이스 엔진이 파일에 액세스할 수 있으므로 CONTROL SERVER 권한이 있는 SQL Server 로그인은 데이터베이스 엔진을 사용하여 감사 파일에 액세스할 수 있습니다. 감사 파일을 읽고 있는 사용자를 기록하려면 master.sys.fn_get_audit_file에 감사를 정의합니다. 이렇게 하면 SQL Server를 통해 감사 파일에 액세스한 CONTROL SERVER 권한을 가진 로그인이 기록됩니다.

Audit Administrator가 보관 등의 목적으로 파일을 다른 위치에 복사한 경우에는 새 위치에 대한 ACL을 다음과 같은 권한으로 축소해야 합니다.

  • Audit Administrator - 읽기 / 쓰기

  • Audit Reader - 읽기

Audit Administrators 또는 Audit Readers만 액세스할 수 있는 별도의 SQL Server 인스턴스(예: SQL Server Express 인스턴스)에서 감사 보고서를 생성하는 것이 좋습니다. 보고 작업을 위해 별도의 데이터베이스 엔진 인스턴스를 사용하면 권한이 없는 사용자가 감사 레코드에 액세스하는 것을 방지할 수 있습니다.

Windows BitLocker 드라이브 암호화 또는 Windows 파일 시스템 암호화를 사용하여 감사 파일이 저장되는 폴더를 암호화하면 권한이 없는 액세스를 추가로 방지할 수 있습니다.

대상에 작성된 감사 레코드에 대한 자세한 내용은 SQL Server Audit 레코드를 참조하십시오

SQL Server Audit 사용 개요

SQL Server Management Studio 또는 Transact-SQL을 사용하여 감사를 정의할 수 있습니다. 감사가 생성되고 활성화되면 대상이 항목을 받습니다.

Windows에서 이벤트 뷰어 유틸리티를 사용하여 Windows 이벤트 로그를 읽을 수 있습니다. 파일 대상의 경우 SQL Server Management Studio의 로그 파일 뷰어 또는 fn_get_audit_file 함수를 사용하여 대상 파일을 읽을 수 있습니다.

감사를 만들고 사용하는 일반적인 프로세스는 다음과 같습니다.

  1. 감사를 만들고 대상을 정의합니다.

  2. 감사에 매핑될 서버 감사 사양 또는 데이터베이스 감사 사양을 만들고 감사 사양을 활성화합니다.

  3. 감사를 활성화합니다.

  4. Windows 이벤트 뷰어, 로그 파일 뷰어 또는 fn_get_audit_file 함수를 사용하여 감사 이벤트를 읽습니다.

자세한 내용은 서버 감사 및 서버 감사 사양 만들기서버 감사 및 데이터베이스 감사 사양 만들기를 참조하십시오.

고려 사항

감사 시작 도중에 오류가 발생하면 서버가 시작되지 않습니다. 이 경우 명령줄에서 –f 옵션을 사용하면 서버를 시작할 수 있습니다.

감사에 대해 ON_FAILURE=SHUTDOWN이 지정되어 있어 감사 오류 발생 시 서버가 종료되거나 시작되지 않으면 MSG_AUDIT_FORCED_SHUTDOWN 이벤트가 로그에 기록됩니다. 종료는 이 설정을 처음 발견할 때 발생하므로 이벤트는 한 번만 기록됩니다. 이 이벤트는 종료를 발생시킨 감사 오류 메시지 이후에 기록됩니다. 관리자는 단일 사용자 모드에서 –m 플래그를 사용하여 SQL Server를 시작함으로써 감사로 인한 종료를 무시할 수 있습니다. 단일 사용자 모드로 시작하면 ON_FAILURE=SHUTDOWN이 지정된 모든 감사를 해당 세션에서 ON_FAILURE=CONTINUE로 실행되도록 다운그레이드할 수 있습니다. –m 플래그를 사용하여 SQL Server를 시작하는 경우 MSG_AUDIT_SHUTDOWN_BYPASSED 메시지가 오류 로그에 기록됩니다.

서비스 시작 옵션에 대한 자세한 내용은 데이터베이스 엔진 서비스 시작 옵션을 참조하십시오.

감사가 정의된 데이터베이스 연결

감사 사양이 있고 서버에 존재하지 않는 GUID를 지정하는 데이터베이스를 연결하면 분리된 감사 사양이 발생합니다. 서버 인스턴스에 GUID가 일치하는 감사가 없으므로 감사 이벤트가 기록되지 않습니다. 이 상황을 해결하려면 ALTER DATABASE AUDIT SPECIFICATION 명령을 사용하여 분리된 감사 사양을 기존의 서버 감사에 연결합니다. 또는 CREATE SERVER AUDIT 명령을 사용하여 지정된 GUID를 가진 새 서버 감사를 만듭니다.

감사 사양이 정의된 데이터베이스를 SQL Server Audit를 지원하지 않는 다른 버전의 SQL Server(예: SQL Server Express)에 연결할 수 있지만 이때 감사 이벤트는 기록되지 않습니다.

데이터베이스 미러링 및 SQL Server Audit

데이터베이스 감사 사양이 정의되어 있고 데이터베이스 미러링을 사용하는 데이터베이스는 데이터베이스 감사 사양을 포함합니다. 미러링된 SQL 인스턴스에서 올바르게 작동하려면 다음 항목을 구성해야 합니다.

  • 데이터베이스 감사 사양을 활성화하여 감사 레코드를 작성할 수 있도록 하려면 미러 서버에 동일한 GUID를 가진 감사가 있어야 합니다. 이는 CREATE AUDIT WITH GUID= <GUID from source Server Audit> 명령을 사용하여 구성할 수 있습니다.

  • 이진 파일 대상의 경우 미러 서버 서비스 계정에 감사 내역이 작성될 위치에 대한 적절한 권한이 있어야 합니다.

  • Windows 이벤트 로그 대상의 경우 미러 서버가 위치한 컴퓨터의 보안 정책이 보안 또는 응용 프로그램 이벤트 로그에 대한 서비스 계정 액세스를 허용해야 합니다.

감사 관리자

sysadmin 고정 서버 역할의 멤버는 각 데이터베이스에서 dbo 사용자로 식별됩니다. 관리자 작업을 감사하기 위해서는 dbo 사용자의 작업을 감사합니다.

Transact-SQL로 감사 생성 및 관리

DDL 문, 동적 관리 뷰/함수 및 카탈로그 뷰를 사용하여 SQL Server Audit의 모든 측면을 구현할 수 있습니다.

데이터 정의 언어 문

다음 DDL 문을 사용하여 감사 사양을 생성, 변경 및 삭제할 수 있습니다.

ALTER AUTHORIZATION

CREATE SERVER AUDIT

ALTER DATABASE AUDIT SPECIFICATION

CREATE SERVER AUDIT SPECIFICATION

ALTER SERVER AUDIT

DROP DATABASE AUDIT SPECIFICATION

ALTER SERVER AUDIT SPECIFICATION

DROP SERVER AUDIT

CREATE DATABASE AUDIT SPECIFICATION

DROP SERVER AUDIT SPECIFICATION

동적 뷰 및 함수

다음 표에서는 SQL Server Audit에 사용할 수 있는 동적 뷰 및 함수를 나열합니다.

동적 뷰 및 함수

설명

sys.dm_audit_actions

감사 로그에 보고할 수 있는 모든 감사 동작 및 SQL Server Audit의 일부로 구성할 수 있는 모든 감사 동작 그룹에 대한 행을 반환합니다.

sys.dm_server_audit_status

감사의 현재 상태에 대한 정보를 제공합니다.

sys.dm_audit_class_type_map

감사 로그의 class_type 필드를 sys.dm_audit_actions의 class_desc 필드에 매핑하는 테이블을 반환합니다.

fn_get_audit_file

서버 감사에 의해 생성된 감사 파일로부터 정보를 반환합니다.

카탈로그 뷰

다음 표에서는 SQL Server Audit에 사용할 수 있는 카탈로그 뷰를 나열합니다.

카탈로그 뷰

설명

sys.database_ audit_specifications

서버 인스턴스에 있는 SQL Server Audit의 데이터베이스 감사 사양 정보를 포함합니다.

sys.database_audit_specification_details

서버 인스턴스에 있는 모든 데이터베이스에 대한 SQL Server Audit의 데이터베이스 감사 사양 정보를 포함합니다.

sys.server_audits

서버 인스턴스에 있는 각 SQL Server Audit에 대해 하나의 행을 포함합니다.

sys.server_audit_specifications

서버 인스턴스에 있는 SQL Server Audit의 서버 감사 사양 정보를 포함합니다.

sys.server_audit_specifications_details

서버 인스턴스에 있는 SQL Server Audit의 서버 감사 사양 세부 정보(동작)를 포함합니다.

sys.server_file_audits

서버 인스턴스에 있는 SQL Server Audit의 파일 감사 유형에 대한 확장 정보를 저장합니다.

사용 권한

SQL Server Audit의 기능과 명령마다 필요한 사용 권한이 있습니다.

서버 감사나 서버 감사 사양을 생성, 변경 또는 삭제하려면 서버 보안 주체에 ALTER ANY SERVER AUDIT 또는 CONTROL SERVER 권한이 있어야 합니다. 데이터베이스 감사 사양을 생성, 변경 또는 삭제하려면 데이터베이스 보안 주체에 ALTER ANY DATABASE AUDIT 권한이나 데이터베이스에 대한 ALTER 또는 CONTROL 권한이 있어야 합니다. 또한 데이터베이스에 연결할 수 있는 권한이나 ALTER ANY SERVER AUDIT 또는 CONTROL SERVER 권한이 보안 주체에 있어야 합니다.

달리 지정되지 않은 경우 카탈로그 뷰를 보려면 보안 주체가 다음 중 하나를 보유하고 있어야 합니다.

  • sysadmin 고정 서버 역할의 멤버 자격

  • CONTROL SERVER 권한

  • VIEW SERVER STATE 권한

  • ALTER ANY AUDIT 권한

  • VIEW AUDIT STATE 권한(sys.server_audits 카탈로그 뷰에 대한 보안 주체 액세스만 제공)

보안 주체가 동적 관리 뷰를 사용하려면 VIEW SERVER STATE 권한이나 ALTER ANY AUDIT 권한이 있어야 합니다.

권한 및 사용 권한을 부여하는 방법은 GRANT(Transact-SQL)를 참조하십시오.

주의 사항주의

sysadmin 역할의 보안 주체는 모든 감사 구성 요소를 변경할 수 있으며 db_owner 역할의 보안 주체는 데이터베이스의 감사 사양을 변경할 수 있습니다. SQL Server Audit는 감사 사양을 만들거나 변경하는 로그온에 ALTER ANY DATABASE AUDIT 이상의 권한이 있는지 확인합니다. 하지만 데이터베이스를 연결할 때는 이를 확인하지 않습니다. 모든 데이터베이스 감사 사양을 sysadmin 또는 db_owner 역할의 보안 주체만큼만 신뢰할 수 있다고 간주해야 합니다.

관련 태스크

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

서버 감사 및 데이터베이스 감사 사양 만들기

SQL Server 감사 로그 보기

보안 로그에 SQL Server Audit 이벤트 쓰기

감사 관련 항목

참고 항목

개념

SQL Server Audit 동작 그룹 및 동작

SQL Server Audit 레코드