Informazioni su SQL Server Audit

Il controllo di un'istanza di SQL Server o di un database di SQL Server comporta il rilevamento e la registrazione di eventi che si verificano nel sistema. In SQL Server sono disponibili numerosi metodi di controllo, come descritto in Controllo (Motore di database). A partire da SQL Server 2008 Enterprise Edition, è inoltre possibile configurare il controllo automatico utilizzando SQL Server Audit.

Per SQL Server sono disponibili numerosi livelli di controllo, a seconda dei requisiti legislativi o standard previsti per la propria installazione. In SQL Server Audit sono disponibili gli strumenti e i processi necessari per abilitare, archiviare e visualizzare controlli in vari oggetti server e di database.

È possibile registrare gruppi di azioni di controllo del server per istanza e gruppi di azioni di controllo del database o azioni di controllo del database per database. L'evento di controllo si verificherà ogni volta che viene rilevata un'azione controllabile.

Componenti di SQL Server Audit

Per controllo si intende la combinazione di più elementi in un unico pacchetto per un gruppo specifico di azioni server o del database. La combinazione dei componenti di SQL Server Audit genera un output denominato controllo, così come la combinazione della definizione di un report con elementi grafici e dati genera un report.

Per creare un controllo, in SQL Server Audit vengono utilizzati gli eventi estesi. Per ulteriori informazioni sugli eventi estesi, vedere Introduzione agli eventi estesi di SQL Server.

SQL Server Audit

L'oggetto SQL Server Audit raccoglie un'unica istanza di azioni a livello di server o di database e gruppi di azioni da monitorare. Il controllo si trova a livello dell'istanza di SQL Server. Per ogni istanza di SQL Server è possibile disporre di più controlli.

Quando si definisce un controllo, è necessario specificare il percorso per l'output dei risultati, ovvero la destinazione del controllo. Il controllo viene creato con stato disabilitato e non controlla alcuna azione in modo automatico. In seguito all'abilitazione del controllo, la relativa destinazione riceve dati dal controllo stesso.

Specifica controllo server

L'oggetto specifica controllo server appartiene a un controllo. È possibile creare una specifica del controllo del server per ogni controllo, poiché entrambi vengono creati nell'ambito dell'istanza di SQL Server.

Nella specifica del controllo del server vengono raccolti molti gruppi di azioni a livello di server, generati dalla caratteristica degli eventi estesi. In una specifica del controllo del server è possibile includere gruppi di azioni di controllo, ovvero gruppi predefiniti di azioni che rappresentano gli eventi atomici che si verificano nel Motore di database. Tali azioni vengono inviate al controllo che le registra nella destinazione.

I gruppi di azioni di controllo a livello di server sono descritti nell'argomento Azioni e gruppi di azioni di SQL Server Audit.

Specifica controllo database

Anche l'oggetto specifica controllo database appartiene a SQL Server Audit. È possibile creare una specifica del controllo del database per ogni database di SQL Server e per ogni controllo.

Nella specifica del controllo del database vengono raccolte azioni di controllo a livello di database generate dalla caratteristica degli eventi estesi. A tale specifica è possibile aggiungere gruppi di azioni di controllo o eventi di controllo. Gli eventi di controllo sono le azioni atomiche che possono essere controllate dal motore di SQL Server, mentre i gruppi di azioni di controllo sono gruppi predefiniti di azioni. Sia gli eventi di controllo che i gruppi di azioni si trovano nell'ambito del database di SQL Server. Tali azioni vengono inviate al controllo che le registra nella destinazione.

I gruppi di azioni di controllo a livello di database e le azioni di controllo sono descritti nell'argomento Azioni e gruppi di azioni di SQL Server Audit.

Destinazione

I risultati di un controllo vengono inviati a una destinazione, che può essere un file, il registro eventi di sicurezza o il registro eventi applicazioni di Windows. La scrittura nel registro di sicurezza non è disponibile in Windows XP. È necessario esaminare e archiviare periodicamente tali registri per garantire che nella destinazione sia disponibile spazio sufficiente per scrivere record aggiuntivi.

Nota importanteImportante

Qualsiasi utente autenticato può leggere e scrivere nel registro eventi applicazioni di Windows, per cui sono necessarie autorizzazioni inferiori rispetto al registro eventi di sicurezza di Windows e risulta pertanto meno sicuro di quest'ultimo.

Per scrivere nel registro eventi di sicurezza di Windows, è necessario che l'account di servizio di SQL Server venga aggiunto ai criteri Generazione controlli di sicurezza. Per impostazione predefinita, gli account di sistema locale, Servizio Locale e Servizio di rete appartengono a tali criteri. Questa impostazione può essere configurata tramite lo snap-in dei criteri di sicurezza (secpol.msc) È inoltre necessario che i criteri di sicurezza Controlla accesso agli oggetti siano abilitati sia per Esito positivo che per Esito negativo. Questa impostazione può essere configurata tramite lo snap-in dei criteri di sicurezza (secpol.msc) In Windows Vista o Windows Server 2008, è possibile impostare i criteri con granularità maggiore generato dall'applicazione dalla riga di comando tramite il programma criteri di controllo (AuditPol.exe). Per ulteriori informazioni sulla procedura per abilitare la scrittura nel registro di sicurezza di Windows, vedere Procedura: Scrittura di eventi di controllo del server nel registro di protezione. Per ulteriori informazioni sul programma Auditpol.exe, vedere l'articolo 921469 della Microsoft Knowledge Base, Utilizzo dei Criteri di gruppo per configurare impostazioni di controllo della sicurezza dettagliate. I registri eventi di Windows sono globali nel sistema operativo Windows. Per ulteriori informazioni sui registri eventi di Windows, vedere la pagina relativa ai cenni preliminari sul Visualizzatore eventi. Se sono necessarie autorizzazioni più specifiche sul controllo, utilizzare la destinazione del file binario.

Quando si salvano informazioni di controllo in un file, per contribuire a impedirne l'alterazione, è possibile limitare l'accesso al percorso del file nei modi seguenti:

  • L'account del servizio SQL Server deve disporre dell'autorizzazione in lettura e in scrittura.

  • Gli amministratori di controllo richiedono in genere l'autorizzazione in lettura e in scrittura. Ciò presuppone che gli amministratori di controllo siano account di Windows per quanto riguarda l'amministrazione dei file di controllo, ad esempio per la copia in diverse condivisioni, per il backup e così via.

  • I lettori di controllo autorizzati a leggere i file di controllo devono disporre dell'autorizzazione in lettura.

Anche quando Motore di database sta scrivendo in un file, gli altri utenti di Windows possono leggere il file di controllo se dispongono dell'autorizzazione. Motore di database non accetta un blocco esclusivo che impedisce le operazioni di lettura.

Poiché Motore di database può accedere al file, gli accessi SQL Server che dispongono dell'autorizzazione CONTROL SERVER possono utilizzare Motore di database per accedere ai file di controllo. Per registrare un utente che sta leggendo il file di controllo, definire un controllo in master.sys.fn_get_audit_file. In tal modo vengono registrati gli accessi con l'autorizzazione CONTROL SERVER che hanno eseguito l'accesso al file di controllo tramite SQL Server.

Se un amministratore di controllo copia il file in un percorso diverso (ad esempio, per scopi di archiviazione e così via), gli ACL sul nuovo percorso devono avere solo le autorizzazioni seguenti:

  • Amministratore di controllo: lettura/scrittura

  • Lettore di controllo: lettura

Si consiglia di generare i report di controllo da un'istanza separata di SQL Server, ad esempio un'istanza di SQL Server Express a cui hanno accesso solo gli amministratori di controllo o i lettori di controllo. Utilizzando un'istanza di Motore di database separata per la segnalazione, è possibile evitare che utenti non autorizzati abbiano accesso al record di controllo.

È possibile offrire protezione aggiuntiva contro l'accesso non autorizzato crittografando la cartella in cui viene archiviato il file di controllo tramite la crittografia unità BitLocker di Windows o Encrypting File System di Windows.

Per ulteriori informazioni sui record di controllo scritti nella destinazione, vedere Record di SQL Server Audit.

Panoramica sull'utilizzo di SQL Server Audit

Per definire un controllo, è possibile utilizzare SQL Server Management Studio o Transact-SQL. In seguito alla creazione e all'abilitazione del controllo, la destinazione riceverà le voci.

L'utilità Visualizzatore eventi disponibile in Windows consente di leggere i registri eventi di Windows. Per le destinazioni file, è possibile utilizzare il Visualizzatore file di log in SQL Server Management Studio o la funzione fn_get_audit_file per leggere il file di destinazione.

Di seguito viene descritto il processo generale di creazione e utilizzo di un controllo.

  1. Creare un controllo e definire la destinazione.

  2. Creare una specifica del controllo del server o una specifica del controllo del database che esegue il mapping al controllo. Abilitare la specifica del controllo.

  3. Abilitare il controllo.

  4. Leggere gli eventi di controllo utilizzando il Visualizzatore eventi di Windows, il Visualizzatore file di log o la funzione fn_get_audit_file.

Nell'argomento Procedure per SQL Server Audit sono contenuti esempi di SQL Server Management Studio e Transact-SQL per l'utilizzo della caratteristica di controllo.

Considerazioni

Se durante la fase iniziale del controllo si verifica un errore, il server non si avvierà. In questo caso, per avviare il server è possibile utilizzare l'opzione -f della riga di comando.

Se in seguito a un errore a livello del controllo il server si arresta o non si avvia perché per il controllo è specificata l'impostazione ON_FAILURE=SHUTDOWN, l'evento MSG_AUDIT_FORCED_SHUTDOWN verrà scritto nel registro. Poiché l'arresto si verificherà quando questa impostazione viene incontrata la prima volta, l'evento verrà scritto solo una volta. Tale evento viene scritto dopo il messaggio di errore relativo al controllo che provoca l'arresto. Per ignorare l'arresto provocato dal controllo, un amministratore può avviare SQL Server in modalità utente singolo utilizzando il flag -m. Se l'avvio viene eseguito in modalità utente singolo, verrà effettuato il downgrade di qualsiasi controllo in cui è specificata l'esecuzione di ON_FAILURE=SHUTDOWN come ON_FAILURE=CONTINUE in tale sessione. Quando SQL Server viene avviato utilizzando il flag –m, il messaggio MSG_AUDIT_SHUTDOWN_BYPASSED verrà scritto nel registro errori.

Per ulteriori informazioni sulle opzioni di avvio del servizio, vedere Utilizzo delle opzioni di avvio del servizio SQL Server.

Collegamento di un database con un controllo definito

Il collegamento di un database che dispone di una specifica del controllo e per cui è specificato un GUID che non esiste nel server provocherà una specifica del controllo orfana. Poiché nell'istanza del server non esiste un controllo con GUID corrispondente, non verrà registrato alcun evento di controllo. Per risolvere questo problema, utilizzare il comando ALTER DATABASE AUDIT SPECIFICATION per connettere la specifica del controllo orfana a un controllo del server esistente oppure utilizzare il comando CREATE SERVER AUDIT per creare un nuovo controllo del server con il GUID specificato.

È possibile collegare un database per cui è definita una specifica del controllo a un'altra edizione di SQL Server che non supporta SQL Server Audit, ad esempio SQL Server Express, ma gli eventi di controllo non verranno registrati.

Mirroring del database e SQL Server Audit

Un database che dispone di una specifica del controllo del database definita e che utilizza il mirroring del database includerà la specifica del controllo del database. Per funzionare correttamente sull'istanza SQL Server con mirroring, è necessario che siano configurati gli elementi seguenti:

  • Il server mirror deve disporre di un controllo con lo stesso GUID per consentire alla specifica del controllo del database di scrivere i record di controllo. Per questa configurazione utilizzare il comando CREATE AUDIT WITH GUID=<GUID from source Server Audit>.

  • Per le destinazioni del file binario, l'account di servizio del server mirror deve disporre delle autorizzazioni appropriate per il percorso in cui verrà scritto l'itinerario di controllo.

  • Per le destinazioni del registro eventi di Windows, i criteri di sicurezza nel computer in cui si trova il server mirror devono consentire all'account di servizio di accedere al registro eventi applicazioni o di sicurezza.