sys.fn_get_audit_file_v2(Transact-SQL)
적용 대상: Azure SQL Database
Azure SQL Database의 sys.fn_get_audit_file_v2
시스템 함수는 이전 sys.fn_get_audit_file
버전에 비해 효율성이 향상된 감사 로그 데이터를 검색하도록 설계되었습니다. 이 함수는 파일 및 레코드 수준 모두에서 시간 기반 필터링을 도입하여 특히 특정 시간 범위를 대상으로 하는 쿼리의 성능이 크게 향상되었습니다.
Important
sys.fn_get_audit_file_v2
는 현재 Azure SQL Database에서만 지원됩니다.
Azure SQL Database의 서버 감사에서 만든 감사 파일의 정보를 반환합니다. 자세한 내용은 SQL Server Audit(데이터베이스 엔진)을 참조하세요.
구문
fn_get_audit_file_v2 ( file_pattern
, { default | initial_file_name | NULL }
, { default | audit_record_offset | NULL }
, { default | start time | NULL }
, { default | end time | NULL } )
인수
file_pattern
읽을 감사 파일 집합의 디렉터리 또는 경로 및 파일 이름을 지정합니다. file_pattern nvarchar(260)입니다.
파일 이름 패턴 없이 경로를 전달하면 오류가 발생합니다.
이 인수는 Blob URL(스토리지 엔드포인트 및 컨테이너 포함)을 지정하는 데 사용됩니다. 별표 와일드카드는 지원하지 않지만 전체 Blob 이름 대신 부분 파일(Blob) 이름 접두사를 사용하여 이 접두사로 시작하는 여러 파일(Blob)을 수집할 수 있습니다. 예시:
<Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/
- 특정 데이터베이스에 대한 모든 감사 파일(Blob)을 수집합니다.<Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel
- 특정 감사 파일(Blob)을 수집합니다.
initial_file_name
감사 파일 집합에서 감사 레코드를 읽기 시작할 특정 파일의 경로와 이름을 지정합니다. initial_file_name nvarchar(260)입니다.
initial_file_name 인수는 유효한 항목을 포함하거나 값 또는 NULL
값을 포함 default
해야 합니다.
audit_record_offset
initial_file_name 지정된 파일이 있는 알려진 위치를 지정합니다. 이 인수를 사용하면 함수는 지정된 오프셋 바로 다음 버퍼의 첫 번째 레코드에서 읽기 시작합니다.
audit_record_offset 인수는 유효한 항목을 포함하거나 값 또는 NULL
값을 포함 default
해야 합니다. audit_record_offset 대단합니다.
start_time
로그를 필터링하기 위한 시작 시간입니다. 이 시간 이전의 레코드는 제외됩니다.
end_time
로그를 필터링하는 종료 시간입니다. 이 시간 이후의 레코드는 제외됩니다.
반환된 테이블
다음 표에서는 이 함수에서 반환된 감사 파일 콘텐츠에 대해 설명합니다.
열 이름 | Type | 설명 |
---|---|---|
event_time |
datetime2 | 감사 가능한 동작이 발생한 날짜 및 시간입니다. Null을 허용하지 않습니다. |
sequence_number |
int | 너무 커서 감사에 대한 쓰기 버퍼에 맞지 않는 단일 감사 레코드 내의 레코드 시퀀스를 추적합니다. Null을 허용하지 않습니다. |
action_id |
varchar(4) | 작업의 ID입니다. Null을 허용하지 않습니다. |
succeeded |
bit | 이벤트를 발생시킨 동작의 성공 여부를 나타냅니다. Null을 허용하지 않습니다. 로그인 이벤트 이외의 모든 이벤트에 대해 이 작업은 작업이 아닌 권한 검사 성공 또는 실패 여부만 보고합니다.1 = success0 = fail |
permission_bitmask |
varbinary(16) | 일부 작업에서 이 비트 마스크는 부여, 거부 또는 해지된 권한입니다. |
is_column_permission |
bit | 열 수준 사용 권한임을 나타내는 플래그입니다. Null을 허용하지 않습니다. 를 반환 0 합니다 permission_bitmask = 0 .1 = true0 = false |
session_id |
smallint | 이벤트가 발생한 세션의 ID입니다. Null을 허용하지 않습니다. |
server_principal_id |
int | 동작을 수행한 로그인 컨텍스트의 ID입니다. Null을 허용하지 않습니다. |
database_principal_id |
int | 작업을 수행한 데이터베이스 사용자 컨텍스트의 ID입니다. Null을 허용하지 않습니다. 적용되지 않으면 반환 0 합니다. 예를 들어 서버 작업입니다. |
target_server_principal_id |
int | 작업이 수행되는 서버 보안 주체 GRANT //DENY REVOKE 입니다. Null을 허용하지 않습니다. 해당되지 않는 경우 반환 0 합니다. |
target_database_principal_id |
int | 작업이 수행되는 데이터베이스 보안 주체 GRANT //DENY REVOKE 입니다. Null을 허용하지 않습니다. 해당되지 않는 경우 반환 0 합니다. |
object_id |
int | 다음 개체를 포함하는 감사가 발생한 엔터티의 ID입니다. - 서버 개체 -데이터베이스 - 데이터베이스 개체 - 스키마 개체 Null을 허용하지 않습니다. 엔터티가 서버 자체인지 또는 감사가 개체 수준에서 수행되지 않는지 여부를 반환 0 합니다. 예를 들어 인증입니다. |
class_type |
varchar(2) | 감사가 수행되는 감사 가능한 엔터티의 유형입니다. Null을 허용하지 않습니다. |
session_server_principal_name |
sysname | 세션의 서버 주체입니다. Nullable. 명시적 또는 암시적 컨텍스트 전환이 있는 경우 데이터베이스 엔진 인스턴스에 연결된 원래 로그인의 ID를 반환합니다. |
server_principal_name |
sysname | 현재 로그인입니다. Nullable. |
server_principal_sid |
varbinary | 현재 로그인 SID입니다. Nullable. |
database_principal_name |
sysname | 현재 사용자입니다. Nullable. 사용할 수 없는 경우 반환 NULL 합니다. |
target_server_principal_name |
sysname | 동작의 대상 로그인입니다. Nullable. 해당되지 않는 경우 반환 NULL 합니다. |
target_server_principal_sid |
varbinary | 대상 로그인의 SID입니다. Nullable. 해당되지 않는 경우 반환 NULL 합니다. |
target_database_principal_name |
sysname | 동작의 대상 사용자입니다. Nullable. 해당되지 않는 경우 반환 NULL 합니다. |
server_instance_name |
sysname | 감사가 수행된 서버 인스턴스의 이름입니다. 표준 server\instance 형식이 사용됩니다. |
database_name |
sysname | 작업이 수행된 데이터베이스 컨텍스트입니다. Nullable. 서버 수준에서 발생하는 감사에 대한 반환 NULL 입니다. |
schema_name |
sysname | 동작이 수행된 스키마 컨텍스트입니다. Nullable. 스키마 외부에서 발생하는 감사에 대한 반환 NULL 입니다. |
object_name |
sysname | 다음 개체를 포함하는 감사가 발생한 엔터티의 이름입니다. - 서버 개체 -데이터베이스 - 데이터베이스 개체 - 스키마 개체 Nullable. 엔터티가 서버 자체인지 또는 감사가 개체 수준에서 수행되지 않는지 여부를 반환 NULL 합니다. 예를 들어 인증입니다. |
statement |
nvarchar(4000) | Transact-SQL 문(있는 경우)입니다. Nullable. 해당되지 않는 경우 반환 NULL 합니다. |
additional_information |
nvarchar(4000) | 단일 이벤트에만 적용되는 고유 정보는 XML로 반환됩니다. 감사 가능한 몇 가지 작업에는 이러한 종류의 정보가 포함됩니다. T-SQL 스택이 연결된 작업의 경우 한 수준의 T-SQL 스택이 XML 형식으로 표시됩니다. XML 형식은 다음과 같습니다. <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack> frame nest_level 는 프레임의 현재 중첩 수준을 나타냅니다. 모듈 이름은 세 부분 형식(database_name 및schema_name object_name )으로 표시됩니다. 모듈 이름은 구문 분석되어 , , / _x 와 같은 < 잘못된 XML 문자를 이스케이프> 합니다. 로 이스케이프됩니다 _xHHHH_ . 문자 HHHH 의 4자리 16진수 UCS-2 코드를 나타냅니다. Nullable. 이벤트에서 보고한 추가 정보가 없으면 반환 NULL 합니다. |
file_name |
varchar(260) | 레코드를 가져온 감사 로그 파일의 경로 및 이름입니다. Null을 허용하지 않습니다. |
audit_file_offset |
bigint | 감사 레코드가 포함된 파일의 버퍼 오프셋입니다. Null을 허용하지 않습니다. 적용 대상: SQL Server만 해당 |
user_defined_event_id |
smallint | 인수로 전달된 사용자 정의 이벤트 ID입니다 sp_audit_write . NULL 시스템 이벤트(기본값) 및 사용자 정의 이벤트의 경우 0이 아닙니다. 자세한 내용은 sp_audit_write(Transact-SQL)를 참조 하세요.적용 대상: SQL Server 2012(11.x) 이상, Azure SQL Database 및 SQL Managed Instance |
user_defined_information |
nvarchar(4000) | 저장 프로시저를 사용하여 sp_audit_write 감사 로그에 기록하려는 추가 정보를 기록하는 데 사용됩니다.적용 대상: SQL Server 2012(11.x) 이상 버전, Azure SQL Database 및 SQL Managed Instance |
audit_schema_version |
int | 항상 1 입니다. |
sequence_group_id |
varbinary | 고유 식별자. 적용 대상: SQL Server 2016(13.x) 이상 버전 |
transaction_id |
bigint | 한 트랜잭션에서 여러 감사 이벤트를 식별하는 고유 식별자입니다. 적용 대상: SQL Server 2016(13.x) 이상 버전 |
client_ip |
nvarchar(128) | 클라이언트 애플리케이션의 원본 IP입니다. 적용 대상: SQL Server 2017(14.x) 이상 버전 및 Azure SQL Database |
application_name |
nvarchar(128) | 감사 이벤트를 발생시킨 문을 실행한 클라이언트 애플리케이션의 이름입니다. 적용 대상: SQL Server 2017(14.x) 이상 버전 및 Azure SQL Database |
duration_milliseconds |
bigint | 쿼리 실행 기간(밀리초)입니다. 적용 대상: Azure SQL Database 및 SQL Managed Instance |
response_rows |
bigint | 결과 집합에 반환된 행 수입니다. 적용 대상: Azure SQL Database 및 SQL Managed Instance |
affected_rows |
bigint | 실행된 문의 영향을 받는 행 수입니다. 적용 대상: Azure SQL Database만 해당 |
connection_id |
uniqueidentifier | 서버의 연결 ID입니다. 적용 대상: Azure SQL Database 및 SQL Managed Instance |
data_sensitivity_information |
nvarchar(4000) | 데이터베이스의 분류된 열을 기반으로 감사된 쿼리에서 반환하는 정보 유형 및 민감도 레이블입니다. Azure SQL Database 데이터 검색 및 분류에 대해 자세히 알아봅니다. 적용 대상: Azure SQL Database만 해당 |
host_name |
nvarchar(128) | 클라이언트 컴퓨터의 호스트 이름입니다. |
session_context |
nvarchar(4000) | 현재 세션 컨텍스트의 일부인 키-값 쌍입니다. |
client_tls_version |
bigint | 클라이언트에서 지원하는 최소 TLS 버전입니다. |
client_tls_version_name |
nvarchar(128) | 클라이언트에서 지원하는 최소 TLS 버전입니다. |
database_transaction_id |
bigint | 현재 세션의 현재 트랜잭션에 대한 트랜잭션 ID입니다. |
ledger_start_sequence_number |
bigint | 트랜잭션 내에서 행 버전을 만든 작업의 시퀀스 번호입니다. 적용 대상: Azure SQL Database만 해당 |
external_policy_permissions_checked |
nvarchar(4000) | 감사 이벤트가 생성되고 Purview 외부 권한 부여 정책이 평가될 때 외부 권한 부여 권한 검사와 관련된 정보입니다. 적용 대상: Azure SQL Database만 해당 |
obo_middle_tier_app_id |
varchar(120) | OBO(On-Behalf-of) 액세스를 사용하여 Azure SQL Database에 연결하는 중간 계층 애플리케이션의 애플리케이션 ID입니다. Nullable. OBO 액세스를 사용하여 요청이 이루어지지 않는 경우 반환 NULL 합니다.적용 대상: Azure SQL Database만 해당 |
is_local_secondary_replica |
bit | True 감사 레코드가 읽기 전용 로컬 보조 복제본 False 에서 시작되면 그렇지 않습니다.적용 대상: Azure SQL Database만 해당 |
sys.fn_get_audit_file 비해 향상된 기능
이 함수는 sys.fn_get_audit_file_v2
파일 및 레코드 수준 모두에서 효율적인 시간 기반 필터링을 도입하여 이전 sys.fn_get_audit_file 비해 크게 향상되었습니다. 이 최적화는 더 작은 시간 범위를 대상으로 하는 쿼리에 특히 도움이 되며 다중 데이터베이스 환경에서 성능을 유지하는 데 도움이 될 수 있습니다.
이중 수준 필터링
파일 수준 필터링: 이 함수는 먼저 지정된 시간 범위에 따라 파일을 필터링하여 검사해야 하는 파일 수를 줄입니다.
레코드 수준 필터링: 선택한 파일 내에서 필터링을 적용하여 관련 레코드만 추출합니다.
성능 향상
성능 향상은 주로 Blob 파일의 롤오버 시간과 쿼리된 시간 범위에 따라 달라집니다. 감사 레코드의 균일한 분포를 가정합니다.
부하 감소: 검색할 파일 및 레코드 수를 최소화하여 시스템의 부하를 줄이고 쿼리 응답 시간을 향상시킵니다.
확장성: 데이터베이스 수가 증가하더라도 성능을 유지하는 데 도움이 되지만, 데이터베이스 수가 많은 환경에서는 순 개선이 덜 두드러질 수 있습니다.
Azure SQL Database 감사 설정에 대한 자세한 내용은 SQL Database 감사 시작을 참조 하세요.
설명
전달된
fn_get_audit_file_v2
file_pattern 인수가 존재하지 않는 경로 또는 파일을 참조하거나 파일이 감사 파일이MSG_INVALID_AUDIT_FILE
아닌 경우 오류 메시지가 반환됩니다.fn_get_audit_file_v2
는 또는 옵션을 사용하여 감사를 만들APPLICATION_LOG
SECURITY_LOG
EXTERNAL_MONITOR
때 사용할 수 없습니다.
사용 권한
CONTROL DATABASE
권한이 필요합니다.
서버 관리자는 서버에 있는 모든 데이터베이스의 감사 로그에 액세스할 수 있습니다.
비 서버 관리자는 현재 데이터베이스의 감사 로그에만 액세스할 수 있습니다.
위의 조건을 충족하지 않는 Blob은 건너뜁니다(건너뛴 Blob 목록이 쿼리 출력 메시지에 표시됨). 이 함수는 액세스가 허용되는 Blob에서만 로그를 반환합니다.
예제
이 예제에서는 특정 Azure Blob Storage 위치에서 감사 로그를 검색하여 레코드를 2023-11-17T08:40:40Z
필터링합니다 2023-11-17T09:10:40Z
.
SELECT *
FROM sys. fn_get_audit_file_v2(
'https://yourstorageaccount.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
DEFAULT,
DEFAULT,
'2023-11-17T08:40:40Z',
'2023-11-17T09:10:40Z')
자세한 정보
시스템 카탈로그 뷰:
- 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)
Transact-SQL:
- CREATE SERVER AUDIT(Transact-SQL)
- 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)