Share via


SQL Server Audit (Database Engine)

Il controllo di un'istanza del motore di database SQL Server o di un singolo database comporta il rilevamento e la registrazione di eventi che si verificano nel motore di database. SQL Server Audit consente di creare controlli del server che possono contenere specifiche di controllo del server per gli eventi a livello di server e specifiche di controllo del database per gli eventi a livello di database. Gli eventi controllati possono essere scritti nei log eventi o in file di controllo.

Esistono numerosi livelli di controllo per SQL Server, in base ai requisiti legislativi o standard per l'installazione. SQL Server Audit fornisce gli strumenti e i processi che sono necessari per abilitare, archiviare e visualizzare controlli in vari oggetti server e 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.

Tutte le edizioni di SQL Server supportano i controlli a livello di server. I controlli a livello di database sono limitati alle edizioni Enterprise, Developer e alle copie di valutazione. Per ulteriori informazioni, vedere Features Supported by the Editions of SQL Server 2014.

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. I componenti di SQL Server controllo combinano per produrre un output denominato controllo, proprio come una definizione di report combinata con elementi grafici e dati produce un report.

SQL Server controllo usa eventi estesi per creare un controllo. Per ulteriori informazioni sugli eventi estesi, vedere eventi estesi.

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 è a livello di istanza di SQL Server. È possibile avere più controlli per ogni istanza di SQL Server.

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 di controllo del server per ogni controllo, perché 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 funzionalità degli eventi estesi. In una specifica del controllo del server è possibile includere gruppi di azioni di controllo , I gruppi di azioni di controllo sono gruppi predefiniti di azioni, che sono 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

L'oggetto Specifica controllo database appartiene anche a un controllo SQL Server. È 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 funzionalità degli eventi estesi. A questa 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 igruppi di azioni di controllo sono gruppi predefiniti di azioni. Entrambi si trovano nell'ambito del database SQL Server. Tali azioni vengono inviate al controllo che le registra nella destinazione. In una specifica del controllo di un database utente non includere oggetti con ambito server, ad esempio viste di sistema.

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. È necessario esaminare e archiviare periodicamente tali registri per garantire che nella destinazione sia disponibile spazio sufficiente per scrivere record aggiuntivi.

Importante

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 log di Sicurezza di Windows è necessario aggiungere l'account del servizio SQL Server al criterio Genera 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 generati dall'applicazione più granulare dalla riga di comando usando il programma di criteri di controllo (AuditPol.exe). Per altre informazioni sulla procedura per abilitare la scrittura nel registro di protezione di Windows, vedere Scrittura di eventi di controllo di SQL Server nel registro di sicurezza. 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 lettura e 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 il motore di database scrive in un file, altri utenti di Windows possono leggere il file di controllo se dispongono dell'autorizzazione. Il motore di database non accetta un blocco esclusivo che impedisce le operazioni di lettura.

Poiché il motore di database può accedere al file, SQL Server account di accesso che dispongono dell'autorizzazione CONTROL SERVER possono usare il 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. Registra gli account di accesso 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

È consigliabile generare report di controllo da un'istanza separata di SQL Server, ad esempio un'istanza di SQL Server Express, a cui solo gli amministratori di controllo o i lettori di controllo hanno accesso. Usando un'istanza separata del motore di database per la creazione di report, è possibile impedire agli utenti non autorizzati di ottenere l'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 SQL Server Audit Records.

Panoramica sull'utilizzo di SQL Server Audit

È possibile usare SQL Server Management Studio o Transact-SQL per definire un controllo. 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 usare 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 tramite il Visualizzatore eventidi Windows, il Visualizzatore file di logo la funzione fn_get_audit_file.

Per ulteriori informazioni, vedere Creazione di un controllo del server e di una specifica del controllo del server e Creazione di un controllo del server e di una specifica del controllo del database.

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 usare 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. Un amministratore può ignorare gli arresti indotti dal controllo avviando SQL Server in modalità utente singolo usando il flag -m. Se l'avvio viene eseguito in modalità utente singolo, verrà effettuato il downgrade di qualsiasi controllo per la cui sessione è specificata l'esecuzione di ON_FAILURE=SHUTDOWN come ON_FAILURE=CONTINUE. Quando SQL Server viene avviato usando il flag -m, il messaggio di MSG_AUDIT_SHUTDOWN_BYPASSED verrà scritto nel log degli errori.

Per altre informazioni sulle opzioni di avvio del servizio, vedere Opzioni di avvio del servizio del motore di database.

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 in cui è definita una specifica di controllo a un'altra edizione di SQL Server che non supporta SQL Server controllo, ad esempio SQL Server Express, ma non registra gli eventi di controllo.

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. Questa configurazione può essere configurata usando il comando CREATE AUDIT WITHGUID GUID<= dal controllo >del server di origine.

  • 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.

Controllo degli amministratori

I membri del ruolo predefinito del sysadmin server vengono identificati come utente dbo in ogni database. Per controllare le azioni degli amministratori, controllare le azioni dell'utente dbo .

Creazione e gestione di controlli con Transact-SQL

È possibile utilizzare istruzioni DDL, viste e funzioni a gestione dinamica e viste del catalogo per implementare tutti gli aspetti di SQL Server Audit.

Istruzioni DDL (Data Definition Language)

Per creare, modificare ed eliminare specifiche del controllo, è possibile utilizzare le istruzioni DDL seguenti:

ALTER AUTHORIZATION CREATE SERVER AUDIT
ALTER DATABASE AUDIT SPECIFICATION CREATE SERVER AUDIT SPECIFICATION
ALTER SERVER AUDIT DROP DATABASE AUDIT SPECIFICATION
ALTER SERVER AUDIT SPECIFICATION DROP SERVER AUDIT
CREATE DATABASE AUDIT SPECIFICATION DROP SERVER AUDIT SPECIFICATION

Viste e funzioni dinamiche

Nella tabella seguente sono elencate le visualizzazioni dinamiche e la funzione che è possibile usare per SQL Server Controllo.

Viste e funzioni dinamiche Descrizione
sys.dm_audit_actions Restituisce una riga per ogni azione di controllo che può essere segnalata nel log di controllo e ogni gruppo di azioni di controllo che può essere configurato come parte di SQL Server Audit.
sys.dm_server_audit_status Fornisce informazioni sullo stato corrente del controllo.
sys.dm_audit_class_type_map Restituisce una tabella che esegue il mapping del campo class_type nel log di controllo al campo class_desc in sys.dm_audit_actions.
fn_get_audit_file Restituisce informazioni da un file di controllo creato da un controllo del server.

Viste del catalogo

Nella tabella seguente sono elencate le viste del catalogo che è possibile usare per il controllo SQL Server.

Viste del catalogo Descrizione
sys.database_ audit_specifications Contiene informazioni sulle specifiche di controllo del database in un controllo SQL Server in un'istanza del server.
sys.database_audit_specification_details Contiene informazioni sulle specifiche di controllo del database in un controllo SQL Server in un'istanza del server per tutti i database.
sys.server_audits Contiene una riga per ogni controllo SQL Server in un'istanza del server.
sys.server_audit_specifications Contiene informazioni sulle specifiche del controllo del server in un controllo di SQL Server in un'istanza del server.
sys.server_audit_specifications_details Contiene informazioni sui dettagli delle specifiche del controllo server (azioni) in un controllo SQL Server in un'istanza del server.
sys.server_file_audits Contiene archivia informazioni estese sul tipo di controllo file in un controllo SQL Server in un'istanza del server.

Autorizzazioni

Ogni funzionalità e comando per SQL Server Audit ha requisiti di autorizzazione singoli.

Per creare, modificare o eliminare un controllo del server o una specifica del controllo del server, le entità server devono disporre dell'autorizzazione ALTER ANY SERVER AUDIT o CONTROL SERVER. Per creare, modificare o eliminare una specifica del controllo del database, le entità di database devono disporre dell'autorizzazione ALTER ANY DATABASE AUDIT o dell'autorizzazione ALTER o CONTROL per il database. Le entità devono inoltre disporre dell'autorizzazione necessaria per connettersi al database o dell'autorizzazione ALTER ANY SERVER AUDIT o CONTROL SERVER.

Se non specificato diversamente, per visualizzare le viste del catalogo un'entità deve disporre di uno degli elementi seguenti:

  • Appartenenza al ruolo predefinito del server sysadmin.

  • Autorizzazione CONTROL SERVER.

  • Autorizzazione VIEW SERVER STATE.

  • Autorizzazione ALTER ANY AUDIT.

  • Autorizzazione VIEW AUDIT STATE, che concede all'entità solo l'accesso alla vista del catalogo sys.server_audits.

Per utilizzare le viste a gestione dinamica, un'entità deve disporre dell'autorizzazione VIEW SERVER STATE o ALTER ANY AUDIT.

Per altre informazioni su come concedere diritti e autorizzazioni, vedere GRANT (Transact-SQL).

Attenzione

Le entità nel ruolo sysadmin possono alterare qualsiasi componente del controllo, mentre quelle nel ruolo db_owner possono alterare le specifiche del controllo in un database. SQL Server Audit verificherà che un accesso che crea o modifica una specifica di controllo disponga almeno dell'autorizzazione ALTER ANY DATABASE AUDIT. ma non esegue alcuna convalida quando si collega un database. È necessario presupporre che tutte le specifiche del controllo del database siano attendibile come le entità nel ruolo sysadmin o db_owner.

Creazione di un controllo del server e di una specifica del controllo del server

Creazione di un controllo del server e di una specifica del controllo del database

Visualizzazione di un log di controllo di SQL Server

Scrittura di eventi di controllo di SQL Server nel registro di sicurezza

Proprietà server (pagina Sicurezza)
Viene illustrato come attivare il controllo dell'accesso per SQL Server. I record di controllo vengono archiviati nel registro applicazioni di Windows.

Opzione di configurazione del server c2 audit mode
Illustra la modalità di controllo della conformità della sicurezza C2 in SQL Server.

Categoria di eventi Security Audit (SQL Server Profiler)
Illustra gli eventi di controllo che è possibile usare in SQL Server Profiler. Per altre informazioni, vedere SQL Server Profiler.

Traccia SQL
Viene illustrato in che modo è possibile usare Traccia SQL dall'interno delle proprie applicazioni per creare tracce manualmente, anziché usare SQL Server Profiler.

Trigger DDL
Vengono illustrate le modalità di utilizzo di trigger DDL (Data Definition Language) per tenere traccia delle modifiche apportate ai database.

Microsoft TechNet: TechCenter di SQL Server: Sicurezza e protezione di SQL Server 2005
Fornisce informazioni aggiornate sulla sicurezza SQL Server.

Vedere anche

Azioni e gruppi di azioni di SQL Server Audit
Record di SQL Server Audit