SQL Server Audit 이해

SQL Server 인스턴스 또는 SQL Server 데이터베이스 감사에는 시스템에서 발생하는 추적 이벤트 및 로깅 이벤트가 포함됩니다. 감사(데이터베이스 엔진)에 설명되어 있듯이 SQL Server에서는 여러 가지 감사 방법을 사용할 수 있습니다. SQL Server 2008 Enterprise부터는 SQL Server Audit를 사용하여 자동 감사를 설정할 수도 있습니다.

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

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

SQL Server Audit 구성 요소

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

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

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 XP에서는 보안 로그에 쓸 수 없습니다. 로그를 정기적으로 검토 및 보관하여 대상에 추가 레코드를 작성할 공간이 충분한지를 확인해야 합니다.

중요 정보중요

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

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

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

  • 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 함수를 사용하여 감사 이벤트를 읽습니다.

SQL Server Audit 방법 도움말 항목 항목에서는 SQL Server Management Studio 및 Transact-SQL에서 감사 기능을 사용하는 예를 보여 줍니다.

고려 사항

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

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

서비스 시작 옵션에 대한 자세한 내용은 SQL Server 서비스 시작 옵션 사용을 참조하십시오.

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

감사 사양이 있고 서버에 존재하지 않는 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 이벤트 로그 대상의 경우 미러 서버가 위치한 컴퓨터의 보안 정책이 보안 또는 응용 프로그램 이벤트 로그에 대한 서비스 계정 액세스를 허용해야 합니다.