Denetim günlüğü sistemi tablo başvurusu
Önemli
Bu özellik Genel Önizlemededir. Şemanın kataloğunuzda system
görünür olması için etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Sistem tablosu şemalarını etkinleştirme
Bu makalede denetim günlüğü tablosu şeması özetlenmiştir ve yaygın hesap kullanımı sorularını yanıtlamak için denetim günlüğü sistem tablosuyla kullanabileceğiniz örnek sorgular sağlanır. Denetim günlüğü olayları hakkında bilgi için bkz . Tanılama günlüğü başvurusu.
Denetim günlüğü sistem tablosu konumunda system.access.audit
bulunur.
Denetim günlüğünde dikkat edilmesi gerekenler
- Denetim günlüklerinin çoğu yalnızca çalışma alanının bölgesinde kullanılabilir.
- Tüm bölgelerde yalnızca Unity Kataloğu hesap düzeyi günlükleri kullanılabilir.
- Hesap düzeyinde denetim günlükleri olarak
0
kaydedilirworkspace_id
.
Denetim günlüğü sistem tablosu şeması
Denetim günlüğü sistem tablosu aşağıdaki şemayı kullanır:
Sütun adı | Veri türü | Açıklama | Örnek |
---|---|---|---|
version |
Dize | Denetim günlüğü şema sürümü | 2.0 |
event_time |
timestamp | Olayın zaman damgası. Saat dilimi bilgileri utc saat dilimini temsil eden değerin +00:00 sonuna kaydedilir. |
2023-01-01T01:01:01.123+00:00 |
event_date |
tarih | Eylemin gerçekleştiği takvim tarihi | 2023-01-01 |
workspace_id |
uzun | Çalışma alanının kimliği | 1234567890123456 |
source_ip_address |
Dize | İsteğin kaynaklandığı IP adresi | 10.30.0.242 |
user_agent |
Dize | İsteğin kaynağı | Apache-HttpClient/4.5.13 (Java/1.8.0_345) |
session_id |
Dize | İsteğin geldiği oturumun kimliği | 123456789 |
user_identity |
Dize | İstek başlatan kullanıcının kimliği | {"email": "user@domain.com", "subjectName": null} |
service_name |
Dize | İstek başlatan hizmet adı | unityCatalog |
action_name |
Dize | Denetim günlüğünde yakalanan olayın kategorisi | getTable |
request_id |
Dize | İsteğin kimliği | ServiceMain-4529754264 |
request_params |
map | Tüm istek parametrelerini içeren anahtar değerlerinin haritası. İstek türüne bağlıdır | [["full_name_arg", "user.chat.messages"], ["workspace_id", "123456789"], ["metastore_id", "123456789"]] |
response |
struct | Yanıt dönüş değerlerinin yapısı | {"statusCode": 200, "errorMessage": null, "result": null} |
audit_level |
Dize | Çalışma alanı veya hesap düzeyi olayı | ACCOUNT_LEVEL |
account_id |
Dize | Hesabın kimliği | 23e22ba4-87b9-4cc2-9770-d10b894bxx |
event_id |
Dize | Olayın kimliği | 34ac703c772f3549dcc8671f654950f0 |
Örnek sorgular
Aşağıdaki bölümler, denetim günlükleri sistem tablonuzla ilgili içgörüler elde etmek için kullanabileceğiniz örnek sorguları içerir. Bu sorguların çalışması için küme ayraçları {{}}
içindeki değerleri kendi parametrelerinizle değiştirin.
Not
Bu örneklerden bazıları, varsayılan olarak etkin olmayan ayrıntılı denetim günlüğü olaylarını içerir. Çalışma alanında ayrıntılı denetim günlüklerini etkinleştirmek için bkz . Ayrıntılı denetim günlüklerini etkinleştirme.
Bu makale aşağıdaki örnek sorguları içerir:
- Bu tabloya kimler erişebilir?
- Son gün içinde bir tabloya hangi kullanıcılar erişmiş?
- Kullanıcı hangi tablolara erişmiş?
- Güvenliği sağlanabilir tüm nesneler için izin değişikliklerini görüntüleme
- En son çalıştırılacak not defteri komutlarını görüntüleme
Bu tabloya kimler erişebilir?
Bu sorgu, bir tabloda hangi kullanıcıların izinlerine sahip olduğunu bulmak için öğesini information_schema
kullanır.
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}}'
Son gün içinde bir tabloya hangi kullanıcılar erişmiş?
Not
Tam adlar DML işlemleri için günlükte yakalanmaz. Tümünü yakalamak için şemayı ve basit adı ekleyin.
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
Kullanıcı hangi tablolara erişmiş?
Not
Tarih aralığına göre filtrelemek için sorgunun en altındaki date yan tümcesini kaldırın.
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
Örnek sonuç
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 |
Güvenliği sağlanabilir tüm nesneler için izin değişikliklerini görüntüleme
Bu sorgu, hesabınızda gerçekleşen her izin değişikliği için bir olay döndürür. Sorgu, değişikliği yapan kullanıcıyı, güvenli kılınabilir nesne türünü ve adını ve yapılan belirli değişiklikleri döndürür.
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
En son çalıştırılacak not defteri komutlarını görüntüleme
Bu sorgu, komutu çalıştıran kullanıcıyla birlikte en son çalıştırılan not defteri komutlarını döndürür.
Not
Eylem runCommand
yalnızca ayrıntılı denetim günlükleri etkinleştirildiğinde yayılır. Ayrıntılı denetim günlüklerini etkinleştirmek için bkz . Ayrıntılı denetim günlüklerini etkinleştirme.
SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100