SQL Server Audit(데이터베이스 엔진)
적용 대상: SQL Server Azure SQL Managed Instance
SQL Server 데이터베이스 엔진 또는 개별 데이터베이스의 인스턴스를 감사하는 작업에는 데이터베이스 엔진에서 발생하는 이벤트를 추적하고 기록하는 작업이 포함됩니다. SQL Server Audit에서는 서버 수준 이벤트에 대한 서버 감사 사양과 데이터베이스 수준 이벤트에 대한 데이터베이스 감사 사양을 포함하는 서버 감사를 생성할 수 있습니다. 감사 이벤트는 이벤트 로그 또는 감사 파일에 기록될 수 있습니다.
Important
Azure SQL Managed Instance에서 이 T-SQL 기능에는 특정 동작 변경 내용이 있습니다. 모든 T-SQL 동작 변경에 대한 자세한 내용은 SQL Server에서 Azure SQL Managed Instance T-SQL 차이점을 참조하세요.
설치에 대한 정부 또는 표준 요구 사항에 따라 SQL Server에 대한 여러 수준의 감사가 있습니다. Azure SQL Audit는 다양한 서버 및 데이터베이스 개체에서 감사를 사용, 저장 및 확인하기 위해 반드시 갖춰야 하는 도구와 프로세스를 제공합니다.
인스턴스당 서버 감사 작업 그룹 및 데이터베이스 감사 작업 그룹 또는 데이터베이스당 데이터베이스 감사 작업을 기록할 수 있습니다. 감사 가능한 동작이 발생할 때마다 감사 이벤트가 발생합니다.
모든 버전의 SQL Server는 서버 수준 감사를 지원합니다. 모든 버전은 SQL Server 2016(13.x) SP1부터 데이터베이스 수준 감사를 지원합니다. 그 전에는 데이터베이스 수준 감사가 Enterprise, Developer 및 Evaluation 버전으로 제한되었습니다. 자세한 내용은 SQL Server 2016 버전에서 지원하는 기능을 참조해 주세요.
참고 항목
이 주제는 SQL Server에 적용됩니다. SQL Database에 대해서는 SQL Database 감사 시작을 참조하세요.
Azure SQL Audit 구성 요소
감사란 특정 서버 작업 또는 데이터베이스 작업 그룹에 대한 여러 요소를 단일 패키지로 조합한 것입니다. 보고서 정의가 그래픽 및 데이터 요소와 결합되어 보고서가 생성되는 것처럼 SQL 감사의 구성 요소가 결합되어 감사가 만들어집니다.
Azure SQL Audit에서는 감사를 만들기 위해 확장 이벤트를 사용합니다. 확장 이벤트에 대한 자세한 내용은 확장 이벤트를 참조하세요.
SQL Server 감사
SQL Server Audit 개체는 사용자가 모니터링하려는 서버 또는 데이터베이스 수준 동작 및 동작 그룹에 대한 하나의 인스턴스를 수집합니다. 감사는 SQL Server 인스턴스 수준에 있습니다. SQL Server 인스턴스 별로 여러 감사가 있을 수 있습니다.
감사를 정의할 때 결과 출력의 위치를 지정합니다. 여기가 감사 대상입니다. 감사는 비활성화된 상태로 만들어지고 작업을 자동으로 감사하지 않습니다. 감사를 사용하도록 설정하면 감사 대상은 감사에서 데이터를 받습니다.
서버 감사 사양
서버 감사 사양 개체는 감사에 속합니다. 둘 다 SQL Server 인스턴스 범위에서 만들어지므로 감사당 하나의 서버 감사 사양을 만들 수 있습니다.
서버 감사 사양은 확장 이벤트 기능에 의해 발생한 많은 서버 수준 작업 그룹을 수집합니다. 서버 감사 사양에 감사 작업 그룹을 넣어도 됩니다. 감사 작업 그룹은 데이터베이스 엔진 발생하는 원자성 이벤트인 미리 정의된 작업 그룹입니다. 이러한 작업은 감사로 전송되어 대상에 기록됩니다.
서버 수준 감사 작업 그룹은 SQL Server 감사 작업 그룹과 동작에 설명되어 있습니다.
데이터베이스 감사 사양
데이터베이스 감사 사양 개체도 Azure SQL Audit에 속합니다. 감사당 SQL Server 데이터베이스당 하나의 데이터베이스 감사 사양을 만들 수 있습니다.
데이터베이스 감사 사양은 확장 이벤트 기능에서 발생한 데이터베이스 수준 감사 작업을 수집합니다. 감사 작업 그룹 또는 감사 이벤트를 데이터베이스 감사 사양에 추가할 수 있습니다. 감사 이벤트는 SQL Server 엔진에서 감사할 수 있는 원자성 작업입니다. 감사 작업 그룹은 미리 정의된 작업 그룹입니다. 둘 다 SQL Server 데이터베이스 범위에 있습니다. 이러한 작업은 감사로 전송되어 대상에 기록됩니다. 시스템 뷰와 같은 서버 범위 개체는 사용자 데이터베이스 감사 사양에 포함하지 마세요.
데이터베이스 수준 감사 작업 그룹 및 감사 동작은 SQL Server 감사 작업 그룹과 동작에 설명돼 있습니다.
대상
감사의 결과는 대상으로 전달되며, 대상은 파일, Windows 보안 이벤트 로그 또는 Windows 애플리케이션 이벤트 로그가 될 수 있습니다. 로그를 정기적으로 검토 및 보관하여 대상에 추가 레코드를 작성할 공간이 충분한지를 확인해야 합니다.
Important
인증된 사용자는 누구나 Windows 애플리케이션 로그를 읽고 쓸 수 있습니다. 애플리케이션 이벤트 로그에는 Windows 보안 이벤트 로그보다 낮은 권한이 필요하며 Windows 보안 이벤트 로그보다 안전하지 않습니다.
Windows 보안 로그에 쓰려면 보안 감사 생성 정책에 SQL Server 서비스 계정을 추가해야 합니다. 기본값으로 로컬 시스템, 로컬 서비스 및 네트워크 서비스는 이 정책의 일부입니다. 이 설정은 보안 정책 스냅인(secpol.msc)을 사용하여 구성할 수 있습니다. 또한 성공 및 실패 모두에 대한 감사 개체 액세스보안 정책을 설정해야 합니다. 이 설정은 보안 정책 스냅인(secpol.msc)을 사용하여 구성할 수 있습니다. Windows Vista 또는 Windows Server 2008 이상에서는 감사 정책 프로그램(AuditPol.exe)을 사용하여 명령줄에서 더 세분화된 애플리케이션 생성 정책을 설정할 수 있습니다. Windows 보안 로그에 쓸 수 있는 단계에 대한 자세한 내용은 보안 로그에 Azure SQL Audit 이벤트 쓰기를 참조하세요. Auditpol.exe 프로그램에 대한 자세한 내용은 기술 자료 문서 921469, 그룹 정책을 사용하여 세부 보안 감사를 구성하는 방법을 참조하세요. Windows 이벤트 로그는 Windows 운영 체제에 전역으로 표시됩니다. Windows 이벤트 로그에 대한 자세한 내용은 이벤트 뷰어 개요를 참조하세요. 감사에 대해 더 정확한 권한이 필요한 경우 이진 파일 대상을 사용합니다.
감사 정보를 파일에 저장할 때 변조를 방지하기 위해 파일 위치에 대한 액세스를 다음과 같이 제한할 수 있습니다.
SQL Server 서비스 계정에는 읽기 및 쓰기 권한이 모두 있어야 합니다.
감사 관리 일반적으로 읽기 및 쓰기 권한이 필요합니다. 감사 관리이스트레이터는 감사 파일을 다른 공유에 복사, 백업 등과 같은 감사 파일 관리를 위한 Windows 계정이라고 가정합니다.
감사 파일을 읽을 권한이 있는 감사 읽기 권한자는 읽기 권한이 있어야 합니다.
데이터베이스 엔진 파일에 쓰는 경우에도 다른 Windows 사용자는 권한이 있는 경우 감사 파일을 읽을 수 있습니다. 데이터베이스 엔진은 읽기 작업을 방해하는 배타적 잠금을 수행하지 않습니다.
데이터베이스 엔진 파일에 액세스할 수 있으므로 CONTROL SERVER 권한이 있는 SQL Server 로그인은 데이터베이스 엔진 사용하여 감사 파일에 액세스할 수 있습니다. 감사 파일을 읽는 모든 사용자를 기록하려면 master.sys.fn_get_audit_file
에 대한 감사를 정의합니다. 이것은 SQL Server를 통해 감사 파일에 액세스한 CONTROL SERVER 권한이 있는 로그인을 기록합니다.
감사 관리자가 파일을 다른 위치에 (보관 등의 목적으로) 복사하는 경우 새 위치의 ACL(액세스 제어 목록)을 다음 권한으로 줄여야 합니다.
감사 관리자 - 읽기/쓰기
Audit Reader - 읽기
감사 관리자 또는 감사 Reader만 액세스할 수 있는 별도의 인스턴스(예: 인스턴스)에서 감사 보고서를 생성하는 것이 좋습니다. 보고를 위해 별도의 데이터베이스 엔진 인스턴스를 사용하면 권한이 없는 사용자가 감사 레코드에 액세스하지 못하도록 방지할 수 있습니다.
Windows BitLocker 드라이브 암호화 또는 Windows 파일 시스템 암호화를 사용하여 감사 파일이 저장되는 폴더를 암호화하면 권한이 없는 액세스를 추가로 방지할 수 있습니다.
대상에 기록된 감사 레코드에 대한 자세한 내용은 Azure SQL Audit 레코드를 참조하세요.
Azure SQL Audit 사용 개요
SQL Server Management Studio 또는 Transact-SQL을 사용하여 감사를 정의할 수 있습니다. 감사가 생성되고 활성화되면 대상이 항목을 받습니다.
Windows에서 이벤트 뷰어 유틸리티를 사용하여 Windows 이벤트 로그를 읽을 수 있습니다. 파일 대상의 경우 SQL Server Management Studio의 로그 파일 뷰어 또는 fn_get_audit_file 함수를 사용하여 대상 파일을 읽을 수 있습니다.
감사 만들기 및 사용에 대한 일반 프로세스는 다음과 같습니다.
감사를 만들고 대상을 정의합니다.
감사에 매핑될 서버 감사 사양 또는 데이터베이스 감사 사양을 만들고 감사 사양을 사용하도록 설정합니다.
감사를 활성화합니다.
Windows 이벤트 뷰어, 로그 파일 뷰어 또는 fn_get_audit_file 함수를 사용하여 감사 이벤트를 읽습니다.
자세한 내용은 서버 감사 및 서버 감사 사양 만들기 및 서버 감사 및 데이터베이스 감사 사양 만들기를 참조하세요.
고려 사항
감사 시작 중에 오류가 발생하는 경우 서버가 시작되지 않습니다. 이 경우 명령줄에서 -f 옵션을 사용하여 서버를 시작할 수 있습니다.
감사 오류로 인해 감사에 대해 ON_FAILURE=SHUTDOWN이 지정되어 서버가 종료되거나 시작되지 않을 경우 MSG_AUDIT_FORCED_SHUTDOWN 이벤트가 로그에 기록됩니다. 이 설정의 첫 번째 만남에서 종료가 발생하므로 이벤트가 한 번 기록됩니다. 이 이벤트는 종료를 일으키는 감사에 대한 실패 메시지 후에 작성됩니다. 관리자가 단일 사용자 모드에서 -m 플래그를 사용하여 SQL Server를 시작하면 감사로 인한 종료를 무시할 수 있습니다. 단일 사용자 모드에서 시작하면 ON_FAILURE=SHUTDOWN이 지정된 모든 감사를 해당 세션에서 ON_FAILURE=CONTINUE로 실행되도록 다운그레이드할 수 있습니다. -m 플래그를 사용하여 를 시작하면 MSG_AUDIT_SHUTDOWN_BYPASSED 메시지가 오류 로그에 기록됩니다.
서비스 시작 옵션에 대한 자세한 내용은 데이터베이스 엔진 서비스 시작 옵션을 참조하세요.
감사가 정의된 데이터베이스 연결
감사 사양이 있고 서버에 존재하지 않는 GUID를 지정하는 데이터베이스를 연결하면 분리된 감사 사양이 발생합니다. 서버 인스턴스에 GUID가 일치하는 감사가 없으므로 감사 이벤트가 기록되지 않습니다. 이 상황을 해결하려면 ALTER DATABASE AUDIT SPECIFICATION 명령을 사용하여 분리된 감사 사양을 기존 서버 감사에 연결합니다. 또는 CREATE SERVER AUDIT 명령을 사용하여 지정된 GUID를 가진 새 서버 감사를 만듭니다.
감사 사양이 정의된 데이터베이스를 Azure SQL Audit를 지원하지 않는 다른 버전의 SQL Server(예: SQL Server Express)에 연결할 수 있지만 이때 감사 이벤트는 기록되지 않습니다.
데이터베이스 미러링 및 Azure SQL Audit
데이터베이스 감사 사양이 정의되어 있고 데이터베이스 미러링을 사용하는 데이터베이스는 데이터베이스 감사 사양을 포함합니다. 미러 SQL 인스턴스에서 올바르게 작동하려면 다음 항목을 구성해야 합니다.
데이터베이스 감사 사양이 감사 레코드를 작성할 수 있도록 하려면 미러 서버에 동일한 GUID가 있는 감사가 있어야 합니다. 이러한 감사는 CREATE AUDIT WITH GUID =<<원본 서버 감사의 GUID>> 명령을 사용하여 구성할 수 있습니다.
이진 파일 대상의 경우 미러 서버 서비스 계정에 감사 내역이 기록되는 위치에 대한 적절한 권한이 있어야 합니다.
Windows 이벤트 로그 대상의 경우 미러 서버가 있는 컴퓨터의 보안 정책은 보안 또는 애플리케이션 이벤트 로그에 대한 서비스 계정 액세스를 허용해야 합니다.
감사 관리자
sysadmin 고정 서버 역할의 구성원은 각 데이터베이스에서 dbo 사용자로 식별됩니다. 관리자의 작업을 감사하려면 dbo 사용자의 작업을 감사합니다.
Transact-SQL을 사용하여 감사 만들기 및 관리
DDL 문, 동적 관리 뷰/함수 및 카탈로그 뷰를 사용하여 Azure SQL Audit의 모든 측면을 구현할 수 있습니다.
데이터 정의 언어 문
다음 DDL 문을 사용하여 감사 사양을 만들고, 변경하고, 삭제할 수 있습니다.
DDL 문 | 설명 |
---|---|
ALTER AUTHORIZATION | 보안 개체의 소유권을 변경합니다. |
ALTER DATABASE AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 데이터베이스 감사 사양 개체를 변경합니다. |
ALTER SERVER AUDIT | SQL Server Audit 기능을 사용하여 서버 감사 개체를 변경합니다. |
ALTER SERVER AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 서버 감사 사양 개체를 변경합니다. |
CREATE DATABASE AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 데이터베이스 감사 사양 개체를 만듭니다. |
CREATE SERVER AUDIT | SQL Server Audit를 사용하여 서버 감사 개체를 만듭니다. |
CREATE SERVER AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 서버 감사 사양 개체를 만듭니다. |
DROP DATABASE AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 데이터베이스 감사 사양 개체를 삭제합니다. |
DROP SERVER AUDIT | SQL Server Audit 기능을 사용하여 서버 감사 개체를 삭제합니다. |
DROP SERVER AUDIT SPECIFICATION | SQL Server Audit 기능을 사용하여 서버 감사 사양 개체를 삭제합니다. |
다이나믹 보기와 함수
다음 표에는 Azure SQL Audit에 사용할 수 있는 다이나믹 보기와 함수가 나와 있습니다.
다이나믹 보기와 함수 | 설명 |
---|---|
sys.dm_audit_actions | 감사 로그에 보고할 수 있는 모든 감사 작업과 Azure SQL Audit의 일부로 구성할 수 있는 모든 감사 작업 그룹에 대한 행을 반환합니다. |
sys.dm_server_audit_status | 세션의 현재 상태에 대한 정보를 제공합니다. |
sys.dm_audit_class_type_map | 감사 로그의 class_type 필드를 sys.dm_audit_actions 의 class_desc 필드에 매핑하는 테이블을 반환합니다. |
fn_get_audit_file | 서버 감사에서 만든 감사 파일의 정보를 반환합니다. |
카탈로그 뷰
다음 표에서는 Azure SQL 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 | 서버 인스턴스의 Azure SQL Audit에 파일 감사 유형에 대한 확장 정보를 저장합니다. |
사용 권한
Azure SQL Audit에 대한 각 기능 및 명령에는 개별 사용 권한 요구 사항이 있습니다.
서버 감사나 서버 감사 사양을 생성, 변경 또는 삭제하려면 서버 보안 주체에 ALTER ANY SERVER AUDIT 또는 CONTROL SERVER 권한이 있어야 합니다. 데이터베이스 감사 사양을 생성, 변경 또는 삭제하려면 데이터베이스 보안 주체에 ALTER ANY DATABASE AUDIT 권한이나 데이터베이스에 대한 ALTER 또는 CONTROL 권한이 있어야 합니다. 또한 보안 주체는 데이터베이스 또는 ALTER ANY SERVER AUDIT 또는 CONTROL SERVER 권한에 연결할 수 있는 권한이 있어야 합니다.
VIEW ANY DEFINITION 권한이 있으면 서버 수준 감사 뷰 보기 권한이 제공되고, VIEW DEFINITION 권한이 있으면 데이터베이스 수준 감사 뷰 보기 권한이 제공됩니다. 이러한 권한을 거부하면 보안 주체에게 ALTER ANY SERVER AUDIT 또는 ALTER ANY DATABASE AUDIT 권한이 있더라도 카탈로그 뷰 보기 기능이 재정의됩니다.
권한 및 권한을 부여하는 방법에 대한 자세한 내용은 GRANT(Transact-SQL)를 참조하세요.
주의
sysadmin 역할의 보안 주체는 모든 감사 구성 요소를 변경할 수 있으며 db_owner 역할의 보안 주체는 데이터베이스의 감사 사양을 변경할 수 있습니다. SQL Server Audit은 감사 사양을 만들거나 변경하는 로그온에 ALTER ANY DATABASE AUDIT 이상의 권한이 있는지 확인합니다. 그러나 데이터베이스를 연결할 때는 유효성 검사가 수행되지 않습니다. 모든 데이터베이스 감사 사양은 sysadmin 또는 db_owner 역할의 보안 주체만큼만 신뢰할 수 있다고 가정해야 합니다.
관련 작업
감사와 밀접하게 관련된 문서
서버 속성(보안 페이지)
SQL Server에 대한 로그인 감사를 설정하는 방법을 설명합니다. 감사 레코드는 Windows 애플리케이션 로그에 저장됩니다.
c2 감사 모드(서버 구성 옵션)
SQL Server의 C2 보안 정책 준수 감사 모드에 대해 설명합니다.
보안 감사 이벤트 범주(SQL Server Profiler)
SQL Server Profiler에서 사용할 수 있는 감사 이벤트를 설명합니다. 자세한 내용은 SQL Server Profiler를 참조하세요.
SQL 추적
SQL Server Profiler를 사용하지 않고 사용자의 애플리케이션 내에서 SQL 추적을 사용하여 수동으로 추적을 만드는 방법에 대해 설명합니다.
DDL 트리거
DDL(데이터 정의 언어) 트리거를 사용하여 데이터베이스 변경 내용을 추적할 수 있는 방법에 대해 설명합니다.
Microsoft TechNet: SQL Server TechCenter: SQL Server 2005 보안 및 보호
SQL Server 보안에 대한 최신 정보를 제공합니다.