감사 로그 시스템 테이블 참조
Important
이 시스템 테이블은 공개 미리 보기system
카탈로그에서 스키마를 사용하도록 설정해야 합니다. 자세한 내용은 시스템 테이블 스키마를 활성화참조하세요.
이 문서에서는 감사 로그 테이블 스키마를 간략하게 설명하고 일반적인 계정 사용량 질문에 대답하기 위해 감사 로그 시스템 테이블과 함께 사용할 수 있는 샘플 쿼리가 있습니다. 감사 로그 이벤트에 대한 자세한 내용은 진단 로그 참조를 참조하세요.
테이블 경로: 이 시스템 테이블은 system.access.audit
있습니다.
감사 로그 고려 사항
- 대부분의 감사 로그는 작업 영역의 지역에서만 사용할 수 있습니다.
- 계정 수준 감사 로그는 .로
workspace_id
기록0
됩니다.
감사 로그 시스템 테이블 스키마
감사 로그 시스템 테이블은 다음 스키마를 사용합니다.
열 이름 | 데이터 형식 | 설명 | 예시 |
---|---|---|---|
version |
string | 감사 로그 스키마 버전 | 2.0 |
event_time |
timestamp | 이벤트의 타임스탬프입니다. 표준 시간대 정보는 UTC 표준 시간대를 나타내는 +00:00 사용하여 값의 끝에 기록됩니다. |
2023-01-01T01:01:01.123+00:00 |
event_date |
date | 작업이 수행된 일정 날짜 | 2023-01-01 |
workspace_id |
long | 작업 영역의 ID | 1234567890123456 |
source_ip_address |
string | 요청이 시작된 IP 주소 | 10.30.0.242 |
user_agent |
string | 요청의 원본 | Apache-HttpClient/4.5.13 (Java/1.8.0_345) |
session_id |
string | 요청이 발생한 세션의 ID | 123456789 |
user_identity |
string | 사용자 시작 요청의 ID | {"email": "user@domain.com", "subjectName": null} |
service_name |
string | 서비스 이름 시작 요청 | unityCatalog |
action_name |
string | 감사 로그에 캡처된 이벤트의 범주 | getTable |
request_id |
string | 요청 ID | ServiceMain-4529754264 |
request_params |
map | 모든 요청 매개 변수를 포함하는 키 값의 맵입니다. 요청 유형에 따라 다름 | [["full_name_arg", "user.chat.messages"], ["workspace_id", "123456789"], ["metastore_id", "123456789"]] |
response |
struct | 응답 반환 값의 구조체 | {"statusCode": 200, "errorMessage": null, "result": null} |
audit_level |
string | 작업 영역 또는 계정 수준 이벤트 | ACCOUNT_LEVEL |
account_id |
string | 계정의 ID | 23e22ba4-87b9-4cc2-9770-d10b894bxx |
event_id |
string | 이벤트의 ID | 34ac703c772f3549dcc8671f654950f0 |
identity_metadata |
struct |
run_by 및 run_as 포함하여 작업에 관련된 아이덴티티입니다. 참조하세요 감사 그룹 전용 컴퓨팅 활동. |
{run_by: example@email.com; run_as: example@email.com; |
샘플 쿼리
다음 섹션에는 감사 로그 시스템 테이블에 대한 인사이트를 얻는 데 사용할 수 있는 샘플 SQL 쿼리가 포함되어 있습니다.
참고 항목
일부 예로는 기본적으로 사용하도록 설정되지 않은 자세한 감사 로그 이벤트가 있습니다. 작업 영역에서 자세한 감사 로그를 사용하도록 설정하려면 자세한 감사 로그 사용을 참조 하세요.
이 문서에는 다음 예제 쿼리가 포함되어 있습니다.
- 이 테이블에 액세스할 수 있는 사람은 누구인가요?
- 지난 7일 이내에 테이블에 액세스한 사용자는 무엇입니까?
- 최근 사용자가 액세스한 테이블은 무엇입니까?
- 모든 보안 개체에 대한 사용 권한 변경 내용 보기
- 가장 최근에 실행된 Notebook 명령 보기
- Databricks 앱에 로그인한 사용자는 무엇입니까?
- 앱이 다른 사용자 또는 그룹과 공유되는 방식을 변경하도록 업데이트된 Databricks 앱은 무엇인가요?
이 테이블에 액세스할 수 있는 사람은 누구인가요?
이 쿼리는 information_schema
사용하여 테이블에 대한 권한이 있는 사용자를 결정합니다. 스키마 이름 및 테이블 이름 매개 변수에 대한 값을 입력합니다.
SELECT
DISTINCT(grantee) AS `ACCESSIBLE BY`
FROM
system.information_schema.table_privileges
WHERE
table_schema = :schema_name
AND table_name = :table_name
UNION
SELECT
table_owner
FROM
system.information_schema.tables
WHERE
table_schema = :schema_name
AND table_name = :table_name
UNION
SELECT
DISTINCT(grantee)
FROM
system.information_schema.schema_privileges
WHERE
schema_name = :schema_name
지난 7일 이내에 테이블에 액세스한 사용자는 무엇입니까?
이 쿼리가 작동하려면 쿼리 매개 변수에 테이블 경로 정보를 입력합니다.
참고 항목
전체 이름은 DML 작업의 로그에 캡처되지 않습니다. 모든 항목을 캡처하려면 스키마와 간단한 이름을 포함합니다.
SELECT
user_identity.email as `User`,
IFNULL(
request_params.full_name_arg,
request_params.name
) AS `Table`,
action_name AS `Type of Access`,
event_time AS `Time of Access`
FROM
system.access.audit
WHERE
(
request_params.full_name_arg = :table_full_name
OR (
request_params.name = :table_name
AND request_params.schema_name = :schema_name
)
)
AND action_name IN ('createTable', 'getTable', 'deleteTable')
AND event_date > now() - interval 7 day
ORDER BY
event_date DESC
최근 사용자가 액세스한 테이블은 무엇입니까?
이 쿼리가 작동하려면 :User
매개 변수에 사용자의 전자 메일을 입력하고 :days_ago
매개 변수에 숫자를 입력합니다.
SELECT
action_name as `EVENT`,
event_time as `WHEN`,
IFNULL(request_params.full_name_arg, 'Non-specific') AS `TABLE ACCESSED`,
IFNULL(request_params.commandText, 'GET table') AS `QUERY TEXT`
FROM
system.access.audit
WHERE
user_identity.email = :User
AND action_name IN (
'createTable',
'commandSubmit',
'getTable',
'deleteTable'
)
AND datediff(now(), event_date) < :days_ago
ORDER BY
event_date DESC
결과 예제
EVENT |
WHEN |
TABLE ACCESSED |
QUERY TEXT |
---|---|---|---|
getTable |
2023-05-31 |
system.access.audit |
GET table |
getTable |
2023-05-31 |
system.access.table_lineage |
GET table |
commandSubmit |
2023-05-31 |
Non-specific |
show functions; |
commandSubmit |
2023-05-31 |
Non-specific |
SELECT request_params FROM system.access.audit WHERE service_name = "notebook" AND action_name = "moveFolder" LIMIT 5 |
모든 보안 개체에 대한 사용 권한 변경 내용 보기
이 쿼리는 계정에서 발생한 모든 권한 변경에 대한 이벤트를 반환합니다. 쿼리는 변경한 사용자, 보안 개체 유형 및 이름 및 특정 변경 내용을 반환합니다.
SELECT event_time, user_identity.email, request_params.securable_type, request_params.securable_full_name, request_params.changes
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name = 'updatePermissions'
ORDER BY 1 DESC
가장 최근에 실행된 Notebook 명령 보기
이 쿼리는 가장 최근에 실행된 Notebook 명령과 명령을 실행한 사용자를 반환합니다.
참고 항목
자세한 runCommand
감사 로그를 사용하도록 설정한 경우에만 작업이 내보내집니다. 자세한 감사 로그를 사용하도록 설정하려면 자세한 감사 로그 사용을 참조 하세요.
SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100
Databricks 앱에 로그인한 사용자는 무엇입니까?
이 쿼리는 Databricks 앱 인스턴스에 로그인할 때마다 이벤트를 반환합니다.
SELECT
event_date,
workspace_id,
request_params.request_object_id as app,
user_identity.email as user_email,
user_identity.subject_name as username
FROM
system.access.audit
WHERE
action_name IN ("workspaceInHouseOAuthClientAuthentication", "mintOAuthToken", "mintOAuthAuthorizationCode")
AND
request_params["client_id"] LIKE "{{application-ID}}"
GROUP BY
event_date,
workspace_id,
app,
user_email,
username
{{application-ID}}
값으로 바꿉 니다. 이 값은 앱을 호스팅하는 Databricks 작업 영역의 관리자 설정에서 찾을 수 있습니다.
앱이 다른 사용자 또는 그룹과 공유되는 방식을 변경하도록 업데이트된 Databricks 앱은 무엇인가요?
이 쿼리는 사용 권한 유형, 새 권한이 할당된 사용자 또는 그룹 및 변경 사항을 제출한 사용자를 포함하여 Databricks 앱에 대한 액세스를 변경하는 권한 업데이트에 대한 이벤트를 반환합니다.
SELECT
event_date,
workspace_id,
request_params['request_object_id'] as app,
user_identity['email'] as sharing_user,
acl_entry['group_name'],
acl_entry['user_name'],
acl_entry['permission_level']
FROM
system.access.audit t
LATERAL VIEW
explode(from_json(request_params['access_control_list'], 'array<struct<user_name:string,permission_level:string,group_name:string>>')) acl_entry AS acl_entry
WHERE
action_name = 'changeAppsAcl'
AND
request_params['request_object_type'] = 'apps'
ORDER BY
event_date DESC