DBAtlas · Veritabanı operasyon atlası

SQL Server Audit kur: login, yetki değişikliği ve tablo erişimi denetimi

SQL ServerGüvenlik

Komut

USE master;
CREATE SERVER AUDIT [Audit_DBA]
TO FILE (FILEPATH = N'D:\Audit\', MAXSIZE = 256 MB, MAX_ROLLOVER_FILES = 20, RESERVE_DISK_SPACE = OFF)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [Audit_DBA] WITH (STATE = ON);

-- Sunucu geneli (tum veritabanlari dahil):
CREATE SERVER AUDIT SPECIFICATION [AuditSpec_Server]
FOR SERVER AUDIT [Audit_DBA]
    ADD (FAILED_LOGIN_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
    ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SERVER_PERMISSION_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP),
    ADD (AUDIT_CHANGE_GROUP)
WITH (STATE = ON);

-- Veritabani: hassas tabloya erisim:
USE [Musteri];
CREATE DATABASE AUDIT SPECIFICATION [AuditSpec_Musteri]
FOR SERVER AUDIT [Audit_DBA]
    ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::[dbo].[Siparis] BY [public])
WITH (STATE = ON);

-- Oku:
SELECT event_time, action_id, succeeded, server_principal_name, database_name,
       schema_name, object_name, LEFT(statement, 200) AS stmt, client_ip, application_name
FROM   sys.fn_get_audit_file(N'D:\Audit\Audit_DBA_*.sqlaudit', DEFAULT, DEFAULT)
WHERE  event_time >= DATEADD(HOUR, -24, SYSUTCDATETIME())
ORDER BY event_time DESC;

Ne yapar?

Dosyaya yazan bir server audit oluşturur; başarısız login'leri, rol üyeliği, principal ve yetki değişikliklerini sunucu genelinde, seçilen tabloya SELECT/DML erişimini veritabanı düzeyinde kaydeder ve kayıtları T-SQL ile okur.

Ne zaman kullanılır?

Denetim/uyum (KVKK, PCI, SOX) gereksiniminde, "bu tabloyu kim okudu/değiştirdi" sorusunda, yetki yükseltme şüphesinde.

Dikkat

Yoğun tabloda SELECT denetimi çok hızlı log üretir ve performansı etkiler; kapsamı nesne ve principal ile daralt. ON_FAILURE = SHUTDOWN, audit yazılamazsa sunucuyu kapatır; yalnız zorunluysa kullan. Audit klasörü SQL Server servis hesabının yazabileceği, DBA dışı kişilerin silemeyeceği bir yer olmalı. event_time UTC'dir. Database audit specification veritabanıyla birlikte restore edilir ama server audit GUID'i eşleşmezse orphan kalır.

DBAtlas'ta aç →

İlgili