共用方式為


稽核記錄系統數據表參考

重要

此系統數據表位於公開預覽版 。 若要存取資料表,必須在您的 system 目錄中啟用架構。 如需詳細資訊,請參閱 啟用系統資料表架構

本文概述稽核記錄數據表架構,並具有可與稽核記錄系統數據表搭配使用的範例查詢,以回答常見的帳戶活動問題。 如需稽核記錄事件的相關信息,請參閱 診斷記錄參考

資料表路徑:此系統資料表位於 system.access.audit

稽核日誌考量

  • 大部分的稽核記錄僅適用於工作區的區域。
  • 帳戶層級稽核記錄檔記錄 workspace_id0

稽核記錄系統數據表架構

稽核記錄系統數據表會使用下列架構:

欄位名稱 資料類型 描述 範例
version 字串 稽核記錄架構版本 2.0
event_time 時間戳記 事件的時間戳。 時區資訊會記錄在值的結尾,+00:00 代表 UTC 時區。 2023-01-01T01:01:01.123+00:00
event_date 日期 動作發生的行事曆日期 2023-01-01
workspace_id 工作區的識別碼 1234567890123456
source_ip_address 字串 要求來源的IP位址 10.30.0.242
user_agent 字串 要求的來源 Apache-HttpClient/4.5.13 (Java/1.8.0_345)
session_id 字串 來自請求的會話識別碼 123456789
user_identity 字串 使用者起始要求的身分識別 {"email": "user@domain.com",
"subjectName": null}
service_name 字串 服務名稱起始要求 unityCatalog
action_name 字串 稽核記錄中擷取的事件類別 getTable
request_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
account_id 字串 帳戶的標識碼 23e22ba4-87b9-4cc2-9770-d10b894bxx
event_id 字串 事件的標識碼 34ac703c772f3549dcc8671f654950f0
identity_metadata 結構體 參與動作的身分,包括 run_byrun_as。 請參閱 稽核群組專用計算活動 {run_by: example@email.com;
run_as: example@email.com;

範例查詢

下列各節包含可用來深入瞭解稽核記錄系統數據表的範例 SQL 查詢。

注意

某些範例包括預設未啟用的詳細稽核記錄事件。 若要在工作區中啟用詳細稽核日誌,請檢視 啟用詳細稽核日誌

本文包含下列範例查詢:

誰可以存取此數據表?

此查詢會使用 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

過去七天內哪些使用者存取數據表?

若要讓此查詢運作,請在查詢參數中輸入資料表路徑資訊。

注意

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

檢視最近執行的筆記本命令

此查詢會傳回最近執行的筆記本命令,以及執行命令的使用者。

注意

只有在啟用詳細稽核記錄檔時,才會發送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 應用程式已更新,以變更如何與其他使用者或群組共用應用程式?

此查詢會傳回許可權更新的事件,以變更 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