감사 로그 시스템 테이블 참조
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; |
샘플 쿼리
다음 섹션에는 감사 로그 시스템 테이블에 대한 인사이트를 얻는 데 사용할 수 있는 샘플 쿼리가 포함되어 있습니다. 이러한 쿼리가 작동하려면 중괄호 안에 있는 값을 매개 변수로 바꿉니다 {{}}
.
참고 항목
일부 예로는 기본적으로 사용하도록 설정되지 않은 자세한 감사 로그 이벤트가 있습니다. 작업 영역에서 자세한 감사 로그를 사용하도록 설정하려면 자세한 감사 로그 사용을 참조 하세요.
이 문서에는 다음 예제 쿼리가 포함되어 있습니다.
- 이 테이블에 액세스할 수 있는 사람은 누구인가요?
- 마지막 날 내의 테이블에 액세스한 사용자는 무엇입니까?
- 사용자가 액세스한 테이블은 무엇입니까?
- 모든 보안 개체에 대한 사용 권한 변경 내용 보기
- 가장 최근에 실행된 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}}'
UNION
SELECT DISTINCT(grantee)
FROM system.information_schema.schema_privileges
WHERE schema_name = '{{schema_name}}'
마지막 날 내의 테이블에 액세스한 사용자는 무엇입니까?
참고 항목
전체 이름은 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 = '{{catalog.schema.table}}'
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 '1 day'
ORDER BY event_date DESC
사용자가 액세스한 테이블은 무엇입니까?
참고 항목
날짜 범위를 기준으로 필터링하려면 쿼리 맨 아래에 있는 날짜 절의 주석 처리를 제거합니다.
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) < 1
-- 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