다음을 통해 공유


감사 로그 시스템 테이블 참조

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_byrun_as포함하여 작업에 관련된 아이덴티티입니다. 참조하세요 감사 그룹 전용 컴퓨팅 활동. {run_by: example@email.com;
run_as: example@email.com;

샘플 쿼리

다음 섹션에는 감사 로그 시스템 테이블에 대한 인사이트를 얻는 데 사용할 수 있는 샘플 SQL 쿼리가 포함되어 있습니다.

참고 항목

일부 예로는 기본적으로 사용하도록 설정되지 않은 자세한 감사 로그 이벤트가 있습니다. 작업 영역에서 자세한 감사 로그를 사용하도록 설정하려면 자세한 감사 로그 사용을 참조 하세요.

이 문서에는 다음 예제 쿼리가 포함되어 있습니다.

이 테이블에 액세스할 수 있는 사람은 누구인가요?

이 쿼리는 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