監査ログ システム テーブル リファレンス
重要
このシステム テーブルは パブリック プレビュー にあります。 テーブルにアクセスするには、 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 |
日付 | アクションが実行された予定表の日付 | 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 など、アクションに関連する ID。 監査グループ専用のコンピュート活動を参照してください。 |
{run_by: example@email.com; run_as: example@email.com; |
サンプル クエリ
次のセクションには、監査ログ システム テーブルに関する分析情報を得るために使用できるサンプル クエリが含まれています。 これらのクエリを機能させるには、 {{}}
中かっこ内の値をパラメーターに置き換えます。
Note
たとえば、既定では有効になっていない詳細監査ログ イベントなどがあります。 ワークスペースで詳細監査ログを有効にするには、「詳細監査ログを有効にする」を参照してください。
この記事には、次のクエリの例が含まれています。
- このテーブルにアクセスできるユーザーは誰ですか?
- 最終日にテーブルにアクセスしたユーザーはどれですか?
- ユーザーはどのテーブルにアクセスしましたか?
- セキュリティ保護可能なすべてのオブジェクトのアクセス許可の変更を表示する
- 最近実行したノートブック コマンドを表示する
- 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}}'
最終日にテーブルにアクセスしたユーザーはどれですか?
Note
フル ネームは、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
ユーザーはどのテーブルにアクセスしましたか?
Note
日付範囲でフィルター処理するには、クエリの下部にある date 句のコメントを解除します。
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
最近実行したノートブック コマンドを表示する
このクエリは、最後に実行されたノートブック コマンドと、コマンドを実行したユーザーを返します。
Note
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 アプリに割り当てられたサービス プリンシパルの 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