稽核記錄系統數據表參考
重要
此系統數據表位於公開預覽版 。 若要存取資料表,必須在您的 system
目錄中啟用架構。 如需詳細資訊,請參閱 啟用系統資料表架構。
本文概述稽核記錄數據表架構,並具有可與稽核記錄系統數據表搭配使用的範例查詢,以回答常見的帳戶使用問題。 如需稽核記錄事件的相關信息,請參閱 診斷記錄參考。
資料表路徑:此系統資料表位於 system.access.audit
。
稽核記錄考慮
- 大部分的稽核記錄僅適用於工作區的區域。
- 帳戶層級稽核記錄檔記錄
workspace_id
為0
。
稽核記錄系統數據表架構
稽核記錄系統數據表會使用下列架構:
欄位名稱 | 資料類型 | 描述 | 範例 |
---|---|---|---|
version |
字串 | 稽核記錄架構版本 | 2.0 |
event_time |
timestamp | 事件的時間戳。 時區資訊會記錄在值的結尾,+00:00 代表 UTC 時區。 |
2023-01-01T01:01:01.123+00:00 |
event_date |
date | 動作發生的行事曆日期 | 2023-01-01 |
workspace_id |
long | 工作區的標識碼 | 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 |
map | 包含所有請求參數的鍵值映射。 視要求類型而定 | [["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 |
struct | 參與動作的身分,包括 run_by 和 run_as 。 請參閱 稽核群組專用計算活動。 |
{run_by: example@email.com; run_as: example@email.com; |
範例查詢
下列各節包含可用來深入瞭解稽核記錄系統數據表的範例 SQL 查詢。
注意
某些範例包括預設未啟用的詳細資訊稽核記錄事件。 若要在工作區中啟用詳細資訊稽核記錄,請參閱 啟用詳細資訊稽核記錄。
本文包含下列範例查詢:
- 誰可以存取此數據表?
- 過去七天內哪些使用者存取數據表?
- 使用者最近存取哪些數據表?
- 檢視所有安全性實體對象的許可權變更
- 檢視最近執行的筆記本命令
- 哪些使用者已登入 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
過去七天內哪些使用者存取數據表?
若要讓此查詢運作,請在查詢參數中輸入資料表路徑資訊。
注意
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