Menerapkan audit

Selesai

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.

Diagram memperlihatkan Azure SQL Database mengirim log audit ke tiga tujuan: Azure Blob Storage untuk retensi jangka panjang, ruang kerja Analitik Log untuk kueri KQL, dan Azure Event Hubs untuk streaming real time.

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)
  • SELECT pada objek tertentu - Pemantauan akses baca yang ditargetkan
  • INSERT, UPDATE, DELETE pada 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.