Menerapkan audit
Audit memberikan visibilitas ke dalam aktivitas database, membantu Anda mendeteksi ancaman keamanan, melacak kepatuhan, dan menyelidiki insiden. Dengan merekam siapa yang mengakses data dan kapan, audit membuat jejak akuntabilitas yang mendukung pemantauan keamanan dan persyaratan peraturan.
Database SQL Server, Azure SQL, dan SQL di Microsoft Fabric menawarkan kemampuan audit bawaan yang menangkap peristiwa database tanpa memerlukan perubahan aplikasi. Memahami cara mengonfigurasi dan mengelola audit membantu Anda mempertahankan pengawasan lingkungan database yang sesuai.
Memahami opsi audit
Audit menangkap peristiwa database dan menulisnya ke log audit. Peristiwa yang Anda audit, tempat Anda menyimpan log, dan bagaimana Anda menganalisisnya bergantung pada persyaratan dan infrastruktur keamanan Anda.
Audit SQL Server menggunakan infrastruktur Extended Events untuk merekam aktivitas. Anda dapat menulis catatan audit ke file, log Keamanan Windows, atau log Aplikasi Windows. Fleksibilitas ini memungkinkan Anda berintegrasi dengan sistem manajemen log yang ada.
Pengauditan Azure SQL Database menulis ke Azure Blob Storage, Log Analytics, atau Event Hubs. Layanan terkelola menangani infrastruktur, sehingga Anda dapat fokus pada memutuskan apa yang harus diaudit daripada mengelola penyimpanan.
Database SQL di Microsoft Fabric menggunakan pengelogan aktivitas Fabric dan Microsoft Purview untuk data audit. Integrasi dengan Microsoft Purview ini memberi Anda audit terpadu di seluruh data estate Anda.
Mengonfigurasi audit SQL Server
Audit SQL Server mengharuskan pembuatan objek audit server yang menentukan tempat menulis catatan audit, lalu membuat spesifikasi audit yang menentukan apa yang harus diambil.
Mulailah dengan membuat audit server yang menulis ke file:
CREATE SERVER AUDIT SecurityAudit
TO FILE (FILEPATH = 'C:\AuditLogs\', MAXSIZE = 100 MB, MAX_ROLLOVER_FILES = 10)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
Parameter QUEUE_DELAY menentukan berapa milidetik untuk buffer peristiwa sebelum menulis. Nilai yang lebih rendah memberikan pengelogan yang lebih real-time tetapi dapat memengaruhi performa. Pengaturan ON_FAILURE menentukan perilaku saat penulisan audit gagal. Gunakan SHUTDOWN untuk skenario kepatuhan penting di mana catatan audit yang hilang tidak dapat diterima.
Sekarang aktifkan audit:
ALTER SERVER AUDIT SecurityAudit WITH (STATE = ON);
Selanjutnya, buat spesifikasi audit server untuk menangkap peristiwa tingkat server:
CREATE SERVER AUDIT SPECIFICATION ServerAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON);
Untuk peristiwa tingkat database, buat spesifikasi audit database:
USE MyDatabase;
GO
CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (SELECT, INSERT, UPDATE, DELETE ON dbo.SensitiveData BY public),
ADD (EXECUTE ON SCHEMA::dbo BY public),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP)
WITH (STATE = ON);
Spesifikasi ini mengaudit semua akses data pada tabel SensitiveData, eksekusi prosedur tersimpan, dan perubahan keanggotaan peran.
Mengonfigurasi pengauditan Azure SQL
Pengauditan Azure SQL Database dikonfigurasi pada tingkat server atau database. Kebijakan tingkat server berlaku untuk semua database di server logis.
Anda dapat mengaktifkan audit di portal Microsoft Azure atau menggunakan T-SQL:
-- Enable auditing to blob storage (configured in Azure portal)
ALTER DATABASE AUDIT SPECIFICATION AzureAuditSpec
ADD (SELECT, INSERT, UPDATE, DELETE ON DATABASE::MyDatabase BY public)
WITH (STATE = ON);
Untuk kontrol yang lebih terperinci, konfigurasikan audit melalui Azure Policy atau templat ARM. Berikut adalah contoh yang menentukan akun penyimpanan, periode retensi, dan grup tindakan audit:
{
"properties": {
"state": "Enabled",
"storageEndpoint": "https://myauditlogs.blob.core.windows.net",
"retentionDays": 90,
"auditActionsAndGroups": [
"SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP",
"FAILED_DATABASE_AUTHENTICATION_GROUP",
"BATCH_COMPLETED_GROUP"
]
}
}
Nota
Pengauditan Azure SQL ke Analitik Log memungkinkan kemampuan kueri dan peringatan yang canggih menggunakan Bahasa Kueri Kusto (KQL). Integrasi ini menyederhanakan pemantauan keamanan dan pelaporan kepatuhan.
Pilih tindakan audit
Pilih tindakan audit berdasarkan persyaratan keamanan dan kepatuhan Anda. Grup tindakan umum meliputi:
Peristiwa autentikasi:
-
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP- Login berhasil -
FAILED_DATABASE_AUTHENTICATION_GROUP- Upaya masuk yang gagal
Perubahan izin:
-
DATABASE_PERMISSION_CHANGE_GROUP- Izinkan, cabut, tolak operasi -
DATABASE_ROLE_MEMBER_CHANGE_GROUP- Perubahan keanggotaan peran -
DATABASE_PRINCIPAL_CHANGE_GROUP- Pembuatan dan modifikasi pengguna
Akses data:
-
BATCH_COMPLETED_GROUP- Semua batch yang telah selesai (bervolume tinggi) -
SELECTpada objek tertentu - Pemantauan akses baca yang ditargetkan -
INSERT,UPDATE,DELETEpada objek tertentu - Pelacakan modifikasi data
Perubahan skema:
-
SCHEMA_OBJECT_CHANGE_GROUP- Modifikasi tabel dan objek -
DATABASE_OBJECT_CHANGE_GROUP- Pernyataan DDL
Penting
Mulailah dengan serangkaian tindakan audit yang berfokus alih-alih mencakup semuanya. Audit volume tinggi memengaruhi performa dan menghasilkan log yang sulit dianalisis.
Mengkueri dan menganalisis log audit
Untuk audit berbasis file SQL Server, gunakan fn_get_audit_file fungsi untuk mengkueri log Anda:
SELECT
event_time,
action_id,
succeeded,
session_server_principal_name AS UserName,
database_name,
object_name,
statement
FROM fn_get_audit_file('C:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time > DATEADD(day, -7, GETUTCDATE())
ORDER BY event_time DESC;
Jika Anda menggunakan audit Azure SQL dengan Log Analytics, Anda dapat mengkueri menggunakan KQL:
AzureDiagnostics
| where Category == "SQLSecurityAuditEvents"
| where TimeGenerated > ago(7d)
| where action_name_s == "SELECT"
| summarize count() by client_ip_s, server_principal_name_s
| order by count_ desc
Kueri ini mengidentifikasi pengguna dan alamat IP mana yang menghasilkan kueri SELECT terbanyak selama seminggu terakhir, membantu mengidentifikasi pola akses yang tidak biasa.
Menerapkan retensi dan perlindungan audit
Log audit Anda memerlukan perlindungan dari perubahan, dan Anda perlu mempertahankannya sesuai dengan persyaratan kepatuhan.
Untuk SQL Server, konfigurasikan penyimpanan yang tidak dapat diubah untuk file audit dan gunakan izin sistem file Windows untuk mencegah penghapusan. Untuk Azure SQL, konfigurasikan penyimpanan dengan penyimpanan blob yang tidak dapat diubah dan tetapkan kebijakan retensi dalam manajemen siklus hidup Azure Storage.
Penting
Simpan log audit secara terpisah dari database yang mereka pantau. Ini memastikan bahwa bahkan jika penyerang membahayakan database, mereka tidak dapat mengubah jejak audit.
Untuk skenario kepatuhan, pertimbangkan praktik retensi ini:
- Tentukan periode retensi berdasarkan persyaratan peraturan (seringkali tujuh tahun untuk data keuangan)
- Menggunakan penyimpanan yang tidak dapat diubah untuk mencegah penghapusan log
- Menerapkan pengarsipan log ke penyimpanan dingin untuk manajemen biaya
- Menetapkan proses untuk peninjauan dan pemberitahuan log audit
Peninjauan data audit secara berkala membantu Anda mengidentifikasi masalah keamanan sebelum menjadi insiden. Buat pemberitahuan untuk upaya masuk yang gagal, perubahan izin di luar jendela pemeliharaan, dan pola akses data yang tidak biasa.