Implementare il controllo

Completato

Il controllo offre visibilità sulle attività del database, consentendo di rilevare le minacce alla sicurezza, tenere traccia della conformità e analizzare gli eventi imprevisti. Registrando chi ha eseguito l'accesso ai dati e quando, il controllo crea un trail di responsabilità che supporta sia il monitoraggio della sicurezza che i requisiti normativi.

I database SQL Server, SQL di Azure e SQL in Microsoft Fabric offrono funzionalità di controllo predefinite che acquisisce gli eventi del database senza richiedere modifiche all'applicazione. Comprendere come configurare e gestire il controllo consente di mantenere la supervisione appropriata degli ambienti di database.

Informazioni sulle opzioni di controllo

Il controllo acquisisce gli eventi del database e li scrive in un log di controllo. Gli eventi controllati, in cui vengono archiviati i log e il modo in cui vengono analizzati dipendono dai requisiti di sicurezza e dall'infrastruttura.

Diagramma che illustra l'invio di log di controllo al database SQL di Azure a tre destinazioni: Archiviazione BLOB di Azure per la conservazione a lungo termine, l'area di lavoro Log Analytics per le query KQL e Hub eventi per lo streaming in tempo reale.

SQL Server Audit usa l'infrastruttura Degli eventi estesi per registrare l'attività. È possibile scrivere record di controllo in file, nel log di sicurezza di Windows o nel registro applicazioni di Windows. Questa flessibilità consente di integrarsi con i sistemi di gestione dei log esistenti.

Il controllo del database SQL di Azure scrive nell'archiviazione BLOB di Azure, in Log Analytics o nell'Hub eventi. Il servizio gestito gestisce l'infrastruttura, quindi è possibile concentrarsi sulla scelta di cosa controllare anziché gestire l'archiviazione.

I database SQL in Microsoft Fabric usano la registrazione delle attività di Fabric e Microsoft Purview per i dati di controllo. Questa integrazione con Microsoft Purview offre un controllo unificato nell'intero patrimonio di dati.

Configurare il controllo di SQL Server

SQL Server Audit richiede la creazione di un oggetto controllo server che definisce dove scrivere record di controllo, quindi creare specifiche di controllo che definiscono cosa acquisire.

Per iniziare, creare un controllo del server che scrive su un file:

CREATE SERVER AUDIT SecurityAudit
TO FILE (FILEPATH = 'C:\AuditLogs\', MAXSIZE = 100 MB, MAX_ROLLOVER_FILES = 10)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);

Il QUEUE_DELAY parametro specifica il numero di millisecondi per memorizzare nel buffer gli eventi prima della scrittura. I valori inferiori forniscono una registrazione più in tempo reale, ma possono influire sulle prestazioni. L'impostazione ON_FAILURE determina il comportamento quando la scrittura del controllo restituisce un errore. Usare SHUTDOWN per scenari di conformità critici in cui i record di controllo mancanti non sono accettabili.

Abilitare ora il controllo:

ALTER SERVER AUDIT SecurityAudit WITH (STATE = ON);

Creare quindi una specifica di controllo del server per acquisire gli eventi a livello di 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);

Per gli eventi a livello di database, creare una specifica di controllo del 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);

Questa specifica controlla tutti gli accessi ai dati sulla tabella SensitiveData, le esecuzioni delle stored procedure e le modifiche dell'appartenenza ai ruoli.

Configurare il controllo sql di Azure

Il controllo del database SQL di Azure è configurato a livello di server o database. I criteri a livello di server si applicano a tutti i database nel server logico.

È possibile abilitare il controllo nel portale di Azure o tramite 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);

Per un controllo più granulare, configurare il controllo tramite Criteri di Azure o i modelli ARM. Ecco un esempio che specifica gli account di archiviazione, il periodo di conservazione e i gruppi di azioni di controllo:

{
  "properties": {
    "state": "Enabled",
    "storageEndpoint": "https://myauditlogs.blob.core.windows.net",
    "retentionDays": 90,
    "auditActionsAndGroups": [
      "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP",
      "FAILED_DATABASE_AUTHENTICATION_GROUP",
      "BATCH_COMPLETED_GROUP"
    ]
  }
}

Annotazioni

Il controllo SQL di Azure per Log Analytics consente potenti funzionalità di query e avvisi usando il linguaggio di query Kusto (KQL). Questa integrazione semplifica il monitoraggio della sicurezza e la creazione di report sulla conformità.

Selezionare le azioni di controllo

Scegliere le azioni di controllo in base ai requisiti di sicurezza e conformità. I gruppi di azioni comuni includono:

Eventi di autenticazione:

  • SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP - Accessi riusciti
  • FAILED_DATABASE_AUTHENTICATION_GROUP - Tentativi di accesso non riusciti

Modifiche alle autorizzazioni:

  • DATABASE_PERMISSION_CHANGE_GROUP - Concedere, revocare, negare le operazioni
  • DATABASE_ROLE_MEMBER_CHANGE_GROUP - Modifiche all'appartenenza ai ruoli
  • DATABASE_PRINCIPAL_CHANGE_GROUP - Creazione e modifica dell'utente

Accesso ai dati:

  • BATCH_COMPLETED_GROUP - Tutti i batch completati (volume elevato)
  • SELECT su oggetti specifici - Monitoraggio dell'accesso in lettura mirato
  • INSERT, UPDATE, DELETE su oggetti specifici - Rilevamento delle modifiche dei dati

Modifiche dello schema:

  • SCHEMA_OBJECT_CHANGE_GROUP - Modifiche a tabelle e oggetti
  • DATABASE_OBJECT_CHANGE_GROUP - Istruzioni DDL

Importante

Iniziare con un set mirato di azioni di controllo anziché acquisire tutti gli elementi. Il controllo con volumi elevati influisce sulle prestazioni e genera log difficili da analizzare.

Eseguire query e analizzare i log di controllo

Per i controlli basati su file di SQL Server, usare la fn_get_audit_file funzione per eseguire query sui log:

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;

Se si usa il controllo SQL di Azure con Log Analytics, è possibile eseguire query usando 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

Questa query identifica gli utenti e gli indirizzi IP che hanno generato la maggior parte delle query SELECT nell'ultima settimana, consentendo di identificare modelli di accesso insoliti.

Implementare la conservazione e la protezione dei controlli

I log di controllo necessitano di protezione da manomissioni ed è necessario conservarli in base ai requisiti di conformità.

Per SQL Server, configurare l'archiviazione non modificabile per i file di controllo e usare le autorizzazioni del file system di Windows per impedire l'eliminazione. Per Azure SQL, configurare l'archiviazione con l'archiviazione BLOB immutabile e impostare i criteri di conservazione nella gestione del ciclo di vita dell'archiviazione di Azure.

Importante

Archiviare i log di controllo separatamente dai database monitorati. In questo modo, anche se gli utenti malintenzionati comprometteno un database, non possono manomettere il audit trail.

Per gli scenari di conformità, prendere in considerazione queste procedure di conservazione:

  • Definire i periodi di conservazione in base ai requisiti normativi (spesso sette anni per i dati finanziari)
  • Usare l'archiviazione non modificabile per impedire l'eliminazione del log
  • Implementare l'archiviazione dei registri nello storage a freddo per la gestione dei costi
  • Stabilire processi per la revisione e gli avvisi del log di controllo

La revisione regolare dei dati di controllo consente di identificare i problemi di sicurezza prima che diventino eventi imprevisti. Creare avvisi per tentativi di accesso non riusciti, modifiche delle autorizzazioni all'esterno delle finestre di manutenzione e modelli di accesso ai dati insoliti.