Odniesienie do tabeli systemu dziennika audytu
Ważne
Ta tabela systemowa znajduje się w publicznej wersji próbnej . Aby uzyskać dostęp do tabeli, schemat musi być włączony w katalogu system
. Aby uzyskać więcej informacji, zobacz Włączanie schematów tabel systemowych.
W tym artykule opisano schemat tabeli dziennika inspekcji i zawiera przykładowe zapytania, których można użyć z tabelą systemu dzienników inspekcji, aby odpowiedzieć na typowe pytania dotyczące użycia konta. Aby uzyskać informacje na temat zdarzeń dziennika inspekcji, zobacz Dokumentacja dziennika diagnostycznego.
ścieżka tabeli: ta tabela systemowa znajduje się w system.access.audit
.
Zagadnienia dotyczące dziennika inspekcji
- Większość dzienników inspekcji jest dostępna tylko w regionie obszaru roboczego.
- Rekord
workspace_id
dzienników inspekcji na poziomie konta jako0
.
Schemat tabeli systemu dzienników inspekcji
Tabela systemu dzienników inspekcji używa następującego schematu:
Nazwa kolumny | Typ danych | opis | Przykład |
---|---|---|---|
version |
string | Wersja schematu dziennika inspekcji | 2.0 |
event_time |
timestamp | Sygnatura czasowa zdarzenia. Informacje o strefie czasowej są rejestrowane na końcu wartości z +00:00 reprezentującą strefę czasową UTC. |
2023-01-01T01:01:01.123+00:00 |
event_date |
data | Data kalendarza, w ramach których miała miejsce akcja | 2023-01-01 |
workspace_id |
długi | Identyfikator obszaru roboczego | 1234567890123456 |
source_ip_address |
string | Adres IP, na którym pochodzi żądanie | 10.30.0.242 |
user_agent |
string | Pochodzenie żądania | Apache-HttpClient/4.5.13 (Java/1.8.0_345) |
session_id |
string | Identyfikator sesji, z której pochodzi żądanie | 123456789 |
user_identity |
string | Tożsamość żądania inicjującego użytkownika | {"email": "user@domain.com", "subjectName": null} |
service_name |
string | Żądanie inicjowania nazwy usługi | unityCatalog |
action_name |
string | Kategoria zdarzenia przechwyconego w dzienniku inspekcji | getTable |
request_id |
string | Identyfikator żądania | ServiceMain-4529754264 |
request_params |
map | Mapa wartości klucza zawierających wszystkie parametry żądania. Zależy od typu żądania | [["full_name_arg", "user.chat.messages"], ["workspace_id", "123456789"], ["metastore_id", "123456789"]] |
response |
struktura | Struktura zwracanych wartości odpowiedzi | {"statusCode": 200, "errorMessage": null, "result": null} |
audit_level |
string | Zdarzenie na poziomie obszaru roboczego lub konta | ACCOUNT_LEVEL |
account_id |
string | Identyfikator konta | 23e22ba4-87b9-4cc2-9770-d10b894bxx |
event_id |
string | Identyfikator zdarzenia | 34ac703c772f3549dcc8671f654950f0 |
identity_metadata |
struktura | Tożsamości zaangażowane w akcję, w tym run_by i run_as . Zobacz Grupę audytu dedykowanej działalności obliczeniowej. |
{run_by: example@email.com; run_as: example@email.com; |
Przykładowe zapytania
Poniższe sekcje zawierają przykładowe zapytania SQL, których można użyć, aby uzyskać wgląd w tabelę systemu dzienników inspekcji.
Uwaga
Niektóre przykłady obejmują pełne zdarzenia dziennika inspekcji, które nie są domyślnie włączone. Aby włączyć pełne dzienniki inspekcji w obszarze roboczym, zobacz Włączanie pełnych dzienników inspekcji.
Ten artykuł zawiera następujące przykładowe zapytania:
- Kto może uzyskać dostęp do tej tabeli?
- Którzy użytkownicy uzyskiwali dostęp do tabeli w ciągu ostatnich siedmiu dni?
- Do których tabel użytkownik miał ostatnio dostęp?
- Wyświetlanie zmian uprawnień dla wszystkich zabezpieczanych obiektów
- Wyświetlanie ostatnio uruchomionych poleceń notesu
- Którzy użytkownicy zalogowali się do aplikacji usługi Databricks?
- Które aplikacje usługi Databricks zostały zaktualizowane, aby zmienić sposób udostępniania aplikacji innym użytkownikom lub grupom?
Kto może uzyskać dostęp do tej tabeli?
To zapytanie używa information_schema
do określenia, którzy użytkownicy mają uprawnienia do tabeli. Wprowadź wartości parametrów katalogu, schematu i nazwy tabeli.
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
Którzy użytkownicy uzyskiwali dostęp do tabeli w ciągu ostatnich siedmiu dni?
Aby to zapytanie działało, wprowadź informacje o ścieżce tabeli w parametrach zapytania.
Uwaga
Pełne nazwy nie są przechwytywane w dzienniku dla operacji DML. Uwzględnij schemat i prostą nazwę, aby objąć wszystko.
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
Do których tabel użytkownik ostatnio miał dostęp?
Aby to zapytanie działało, wprowadź adres e-mail użytkownika w parametrze :User
i liczbę w parametrze :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
Przykładowy wynik
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 |
Wyświetlanie zmian uprawnień dla wszystkich zabezpieczanych obiektów
To zapytanie zwróci zdarzenie dla każdej zmiany uprawnień, która wystąpiła na Twoim koncie. Zapytanie zwróci użytkownika, który dokonał zmiany, zabezpieczanego typu obiektu i nazwy oraz określonych zmian, które zostały wprowadzone.
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
Wyświetlanie ostatnio uruchomionych poleceń notesu
To zapytanie zwraca ostatnio uruchamiane polecenia notesu i użytkownik, który uruchomił polecenie.
Uwaga
Akcja runCommand
jest emitowana tylko po włączeniu pełnych dzienników inspekcji. Aby włączyć pełne dzienniki inspekcji, zobacz Włączanie pełnych dzienników inspekcji.
SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100
Którzy użytkownicy zalogowali się do aplikacji usługi Databricks?
To zapytanie zwraca zdarzenie dla każdego logowania do wystąpienia aplikacji usługi 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
Zastąp {{application-ID}}
ciąg wartością Identyfikator aplikacji dla jednostki usługi przypisanej do określonej aplikacji usługi Databricks. Tę wartość można znaleźć w ustawieniach administratora obszaru roboczego usługi Databricks hostowania aplikacji.
Które aplikacje usługi Databricks zostały zaktualizowane, aby zmienić sposób udostępniania aplikacji innym użytkownikom lub grupom?
To zapytanie zwraca zdarzenia dotyczące aktualizacji uprawnień w celu zmiany dostępu do aplikacji usługi Databricks, w tym typu uprawnień, użytkownika lub grupy, do której przypisano nowe uprawnienie, oraz użytkownika, który przesłał zmianę.
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