중요
이 시스템 테이블은 공개 미리 보기 상태에 있습니다.
이 문서에서는 감사 로그 테이블 스키마를 간략하게 설명하고 일반적인 계정 활동 질문에 대답하기 위해 감사 로그 시스템 테이블과 함께 사용할 수 있는 샘플 쿼리가 있습니다. 감사 로그 이벤트에 대한 자세한 내용은 진단 로그 참조를 참조하세요.
테이블 경로: 이 시스템 테이블은 system.access.audit있습니다.
감사 로그 고려 사항
- 대부분의 감사 로그는 작업 영역의 지역에서만 사용할 수 있습니다.
- 계정 수준 감사 로그는
workspace_id을0로 기록합니다.
감사 로그 시스템 테이블 스키마
감사 로그 시스템 테이블은 다음 스키마를 사용합니다.
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 계정의 ID | 23e22ba4-87b9-4cc2-9770-d10b894bxx |
workspace_id |
문자열 | 작업 영역의 ID | 1234567890123456 |
version |
문자열 | 감사 로그 스키마 버전 | 2.0 |
event_time |
시간표시 | 이벤트의 타임스탬프입니다. 표준 시간대 정보는 UTC 표준 시간대를 나타내는 +00:00 사용하여 값의 끝에 기록됩니다. |
2023-01-01T01:01:01.123+00:00 |
event_date |
날짜 | 작업이 수행된 일정 날짜 | 2023-01-01 |
source_ip_address |
문자열 | 요청이 시작된 IP 주소 | 10.30.0.242 |
user_agent |
문자열 | 요청의 원본 | Apache-HttpClient/4.5.13 (Java/1.8.0_345) |
session_id |
문자열 | 요청이 발생한 세션의 ID | 123456789 |
user_identity |
구조체 (struct) | 사용자 시작 요청의 ID | {"email": "user@domain.com","subjectName": null} |
service_name |
문자열 | 서비스 이름 시작 요청 | unityCatalog |
action_name |
문자열 | 감사 로그에 캡처된 이벤트의 범주 | getTable |
request_id |
문자열 | 요청 ID | ServiceMain-4529754264 |
request_params |
지도 | 모든 요청 매개 변수를 포함하는 키 값의 맵입니다. 요청 유형에 따라 다름 | [["full_name_arg", "user.chat.messages"],["workspace_id", "123456789"],["metastore_id", "123456789"]] |
response |
구조체 (struct) | 응답 반환 값의 구조체 | {"statusCode": 200, "errorMessage": null,"result": null} |
audit_level |
문자열 | 작업 영역 또는 계정 수준 이벤트 | ACCOUNT_LEVEL |
event_id |
문자열 | 이벤트의 ID | 34ac703c772f3549dcc8671f654950f0 |
identity_metadata |
구조체 (struct) |
run_by 및 run_as포함하여 작업에 관련된 아이덴티티입니다.
전용 컴퓨팅 작업을 감사하는 그룹을 참조하세요. |
{run_by: example@email.com; run_as: example@email.com; |
샘플 쿼리
다음 섹션에는 감사 로그 시스템 테이블에 대한 인사이트를 얻는 데 사용할 수 있는 샘플 SQL 쿼리가 포함되어 있습니다.
비고
일부 예로는 기본적으로 사용하도록 설정되지 않은 자세한 감사 로그 이벤트가 있습니다. 작업 영역에서 자세한 감사 로그를 사용하도록 설정하려면 자세한 감사 로그 사용을 참조 하세요.
이 문서에는 다음 예제 쿼리가 포함되어 있습니다.
- 이 테이블에 액세스할 수 있는 사람은 누구인가요?
- 지난 7일 이내에 테이블에 액세스한 사용자는 무엇입니까?
- 최근 사용자가 액세스한 테이블은 무엇입니까?
- 모든 보안 개체에 대한 사용 권한 변경 내용 보기
- 가장 최근에 실행된 Notebook 명령 보기
- Databricks 앱에 로그인한 사용자는 누구입니까?
- 앱이 다른 사용자 또는 그룹과 공유되는 방식을 변경하도록 업데이트된 Databricks 앱은 무엇인가요?
- 가장 최근에 만든 Databricks 앱은 무엇입니까?
- Databricks Apps 사용자의 최신 작업은 무엇인가요?
이 테이블에 액세스할 수 있는 사람은 누구인가요?
이 쿼리는 information_schema 사용하여 테이블에 대한 권한이 있는 사용자를 결정합니다. 카탈로그, 스키마 및 테이블 이름 매개 변수에 대한 값을 입력합니다.
SELECT DISTINCT(grantee), privilege_type, 'catalog' AS level
FROM system.information_schema.catalog_privileges
WHERE
catalog_name = :catalog_name
UNION
SELECT DISTINCT(grantee), privilege_type, 'schema' AS level
FROM system.information_schema.schema_privileges
WHERE
catalog_name = :catalog_name AND schema_name = :schema_name
UNION
SELECT DISTINCT(grantee) AS `accessible by`, privilege_type, 'table' AS level
FROM
system.information_schema.table_privileges
WHERE
table_catalog = :catalog_name AND table_schema = :schema_name AND table_name = :table_name
UNION
SELECT table_owner, 'ALL_PRIVILEGES' AS privilege_type, 'owner' AS level
FROM system.information_schema.tables
WHERE
table_catalog = :catalog_name AND table_schema = :schema_name AND table_name = :table_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 |
SELECTrequest_paramsFROMsystem.access.auditWHEREservice_name = "notebook"AND action_name = "moveFolder"LIMIT5 |
모든 보안 개체에 대한 사용 권한 변경 내용 보기
이 쿼리는 계정에서 발생한 모든 권한 변경에 대한 이벤트를 반환합니다. 쿼리는 변경한 사용자, 보안 개체 유형 및 이름 및 특정 변경 내용을 반환합니다.
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,
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"] = "<oauth2-app-client-id>"
GROUP BY
event_date,
workspace_id,
user_email,
username
<oauth2-app-client-id>을(를) 특정 Databricks 앱에 할당된 서비스 주체의 OAuth2 앱 클라이언트 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
가장 최근에 만든 Databricks 앱은 무엇입니까?
이 쿼리는 만들기 이벤트의 타임스탬프를 기준으로 정렬된 앱의 이름, 작성자 및 생성 날짜를 포함한 앱 만들기 이벤트를 반환합니다.
SELECT
event_time,
user_identity.email AS email,
action_name,
get_json_object(request_params.app, '$.name') AS app_name
FROM
system.access.audit
WHERE
action_name == "createApp"
ORDER BY
event_time DESC
Databricks Apps 사용자의 최신 작업은 무엇인가요?
이 쿼리는 이벤트의 타임스탬프를 기준으로 정렬된 Databricks Apps 사용자의 최근 작업을 반환합니다.
SELECT
event_time,
user_identity.email AS email,
service_name,
action_name
FROM
system.access.audit
WHERE
service_name = 'apps'
AND
user_identity.email = '<user-email>'
ORDER BY
event_time DESC