SQL Server Audit (Database Engine)

  • 01/01/2020
  • 13 minutes to read
    • D
    • v
    • M
    • M
    • D
    • +8

Applies to: yes SQL Server (tutte le versioni supportate)Sì Azure SQL Managed Instance

Il controllo di un’istanza del motore di database SQL Server o di un singolo database comporta il monitoraggio e la registrazione degli eventi che si verificano nel motore di database. SQL Server audit consente di creare audit del server, che possono contenere specifiche di audit del server per gli eventi a livello di server e specifiche di audit del database per gli eventi a livello di database. Gli eventi controllati possono essere scritti nei registri eventi o nei file di controllo.

Importante

Su Azure SQL Managed Instance, questa funzione T-SQL presenta alcune modifiche al comportamento. Vedere Azure SQL Managed Instance T-SQL differences da SQL Server per i dettagli relativi a tutte le modifiche al comportamento di T-SQL.

Esistono diversi livelli di controllo per SQL Server, a seconda dei requisiti governativi o degli standard per l’installazione. SQL Server Audit fornisce gli strumenti e i processi necessari per abilitare, archiviare e visualizzare gli audit su 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 verifica ogni volta che viene rilevata l’azione verificabile.

Tutte le edizioni di SQL Server supportano gli audit a livello di server. Tutte le edizioni supportano gli audit a livello di database a partire da SQL Server 2016 (13.x) SP1. In precedenza, il controllo a livello di database era limitato alle edizioni Enterprise, Developer e Evaluation. Per ulteriori informazioni, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.

Nota

Questo argomento si applica a SQL Server. Per Database SQL, vedere Iniziare con il controllo del database SQL.

Componenti di controllo SQL Server

Un controllo è la combinazione di più elementi in un unico pacchetto per un gruppo specifico di azioni del server o azioni del database. I componenti di SQL Server audit si combinano per produrre un output chiamato audit, proprio come una definizione di report combinata con elementi grafici e dati produce un report.

SQL Server audit utilizza eventi estesi per aiutare a creare un audit. Per ulteriori informazioni sugli eventi estesi, vedere Eventi estesi.

SQL Server Audit

L’oggetto SQL Server Audit raccoglie una singola istanza di azioni a livello di server o database e gruppi di azioni da monitorare. L’audit è a livello di istanza di SQL Server. È possibile disporre di più audit per istanza di SQL Server.

Quando si definisce un controllo, si specifica il percorso per l’output dei risultati. Questa è la destinazione dell’audit. L’audit viene creato in uno stato disabilitato e non verifica automaticamente alcuna azione. Dopo aver abilitato l’audit, la destinazione dell’audit riceve i dati dall’audit.

Specifica controllo server

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

La specifica di controllo del server raccoglie molti gruppi di azioni a livello di server generati dalla funzionalità Eventi estesi. È possibile includere gruppi di azioni di controllo in una specifica di controllo del server. I gruppi di azioni di controllo sono gruppi predefiniti di azioni, che sono eventi atomici che si verificano nel motore di database. Queste azioni vengono inviate all’audit, che le registra nella destinazione.

I gruppi di azioni di controllo a livello di server sono descritti nell’argomento Gruppi e azioni di controllo di SQL Server.

Database Audit Specification

L’oggetto Database Audit Specification appartiene anche a SQL Server audit. È possibile creare una specifica di audit del database per database SQL Server per audit.

La specifica di controllo del database raccoglie le azioni di controllo a livello di database generate dalla funzionalità Eventi estesi. È possibile aggiungere gruppi di azioni di controllo o eventi di controllo a una specifica di controllo del database. Gli eventi di controllo sono le azioni atomiche che possono essere controllate dal motore SQL Server. I gruppi di azioni di controllo sono gruppi predefiniti di azioni. Entrambi si trovano nell’ambito del database SQL Server. Queste azioni vengono inviate all’audit, che le registra nella destinazione. Non includere oggetti con ambito server, come le viste di sistema, in una specifica di controllo del database utente.

I gruppi e le azioni di controllo a livello di database sono descritti nell’argomento Gruppi e azioni di controllo di SQL Server.

Target

I risultati di un controllo vengono inviati a una destinazione, che può essere un file, il registro eventi di sicurezza di Windows o il registro eventi dell’applicazione di Windows. I registri devono essere rivisti e archiviati periodicamente per assicurarsi che la destinazione disponga di spazio sufficiente per scrivere record aggiuntivi.

Importante

Qualsiasi utente autenticato può leggere e scrivere nel registro eventi dell’applicazione Windows. Il registro eventi dell’applicazione richiede autorizzazioni inferiori rispetto al registro eventi di sicurezza di Windows ed è meno sicuro rispetto al registro eventi di sicurezza di Windows.

La scrittura nel registro di sicurezza di Windows richiede l’aggiunta dell’account del servizio SQL Server al criterio Genera audit di sicurezza. Per impostazione predefinita, il Sistema locale, il Servizio locale e il servizio di rete fanno parte di questa politica. Questa impostazione può essere configurata utilizzando lo snap-in dei criteri di sicurezza (secpol.MSC). Inoltre, il criterio di sicurezza dell’accesso all’oggetto di controllo deve essere abilitato sia per il successo che per l’errore. Questa impostazione può essere configurata utilizzando lo snap-in dei criteri di sicurezza (secpol.MSC). In Windows Vista o Windows Server 2008, è possibile impostare il criterio generato dall’applicazione più granulare dalla riga di comando utilizzando il programma di criteri di controllo (AuditPol.exe). Per ulteriori informazioni sui passaggi per abilitare la scrittura nel registro di sicurezza di Windows, vedere Scrivere Eventi di controllo di SQL Server nel registro di sicurezza. Per ulteriori informazioni sulla Auditpol.programma exe, vedere l’articolo 921469 della Knowledge Base, Come utilizzare i criteri di gruppo per configurare il controllo di sicurezza dettagliato. I registri eventi di Windows sono globali per il sistema operativo Windows. Per ulteriori informazioni sui registri eventi di Windows, vedere Panoramica visualizzatore eventi. Se hai bisogno di autorizzazioni più precise per l’audit, usa la destinazione file binario.

Quando si salvano le informazioni di controllo in un file, per evitare manomissioni, è possibile limitare l’accesso al percorso del file nei seguenti modi:

  • L’account del servizio SQL Server deve disporre di autorizzazioni di lettura e scrittura.

  • Gli amministratori di audit in genere richiedono l’autorizzazione di lettura e scrittura. Ciò presuppone che gli amministratori di controllo siano account Windows per l’amministrazione dei file di controllo, ad esempio: copiarli in condivisioni diverse, eseguirne il backup e così via.

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

Anche quando il motore di database sta scrivendo su un file, altri utenti 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, gli accessi SQL Server che dispongono dell’autorizzazione CONTROL SERVER possono utilizzare il Motore di database per accedere ai file di controllo. Per registrare qualsiasi utente che sta leggendo il file di controllo, definire un controllo su master.sys.fn_get_audit_file. In questo modo vengono registrati gli accessi con l’autorizzazione del server di CONTROLLO che hanno effettuato l’accesso al file di controllo tramite SQL Server.

Se un amministratore di controllo copia il file in una posizione diversa (per scopi di archiviazione e così via), gli ACL nella nuova posizione devono essere ridotti alle seguenti autorizzazioni:

  • Amministratore di Controllo – Lettura / Scrittura

  • Audit Reader – Leggere

si consiglia di generare i report di controllo da un’altra istanza di SQL Server, ad esempio un’istanza di SQL Server Express, a cui solo gli Amministratori di Controllo o Audit che i Lettori hanno accesso. Utilizzando un’istanza separata del motore di database per i rapporti, è possibile impedire agli utenti non autorizzati di ottenere l’accesso al record di controllo.

È possibile offrire una protezione aggiuntiva contro l’accesso non autorizzato crittografando la cartella in cui è memorizzato il file di controllo utilizzando Windows BitLocker Drive Encryption o Windows Encrypting File System.

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

Panoramica sull’utilizzo di SQL Server Audit

È possibile utilizzare SQL Server Management Studio o Transact-SQL per definire un audit. Dopo aver creato e abilitato l’audit, la destinazione riceverà le voci.

È possibile leggere i registri eventi di Windows utilizzando l’utilità Visualizzatore eventi in Windows. Per le destinazioni dei file, è possibile utilizzare il visualizzatore file di registro in SQL Server Management Studio o la funzione fn_get_audit_file per leggere il file di destinazione.

Il processo generale per la creazione e l’utilizzo di un audit è il seguente.

  1. Creare un controllo e definire la destinazione.

  2. Creare una specifica di controllo del server o una specifica di controllo del database da associare all’audit. Abilitare la specifica di controllo.

  3. Abilitare l’audit.

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

Per ulteriori informazioni, vedere Creazione di una specifica di audit server e di audit server e creazione di una specifica di audit server e database.

Considerazioni

In caso di errore durante l’avvio dell’audit, il server non verrà avviato. In questo caso, il server può essere avviato utilizzando l’opzione-f nella riga di comando.

Quando un errore di controllo causa l’arresto o l’avvio del server perché ON_FAILURE=SHUTDOWN è specificato per l’audit, l’evento MSG_AUDIT_FORCED_SHUTDOWN verrà scritto nel registro. Poiché l’arresto si verificherà al primo incontro di questa impostazione, l’evento verrà scritto una volta. Questo evento viene scritto dopo il messaggio di errore per l’audit che causa l’arresto. Un amministratore può ignorare gli arresti indotti dall’audit avviando SQL Server in modalità utente singolo utilizzando il flag-M. Se si avvia in modalità utente singolo, verrà eseguito il downgrade di qualsiasi controllo in cui ON_FAILURE = SHUTDOWN è specificato per l’esecuzione in quella sessione come ON_FAILURE = CONTINUE. Quando SQL Server viene avviato utilizzando il flag-m, il messaggio MSG_AUDIT_SHUTDOWN_BYPASSED verrà scritto nel registro degli errori.

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

Collegare un database con un audit definito

Collegare un database con una specifica di audit e specifica un GUID che non esiste sul server causerà una specifica di audit orfana. Poiché un controllo con un GUID corrispondente non esiste nell’istanza del server, non verranno registrati eventi di controllo. Per correggere questa situazione, utilizzare il comando ALTER DATABASE AUDIT SPECIFICATION per collegare la specifica di audit orfana a un audit server esistente. In alternativa, utilizzare il comando CREA CONTROLLO SERVER per creare un nuovo controllo server con il GUID specificato.

È possibile allegare un database con una specifica di controllo definita a un’altra edizione di SQL Server che non supporta SQL Server audit, ad esempio SQL Server Express, ma non registra gli eventi di controllo.

Mirroring del database e controllo SQL Server

Un database con una specifica di controllo del database definita e che utilizza il mirroring del database includerà la specifica di controllo del database. Per funzionare correttamente sull’istanza SQL con mirroring, è necessario configurare i seguenti elementi:

  • Il server mirror deve disporre di un controllo con lo stesso GUID per consentire alla specifica di controllo del database di scrivere record di controllo. Questo può essere configurato utilizzando il comando CREATE AUDIT WITH GUID = < GUID from source Server Audit>.

  • Per le destinazioni di file binari, l’account del servizio server mirror deve disporre di autorizzazioni appropriate per la posizione in cui viene scritta la traccia di controllo.

  • Per le destinazioni del registro eventi di Windows, i criteri di sicurezza del computer in cui si trova il server mirror devono consentire l’accesso dell’account di servizio al registro eventi di sicurezza o dell’applicazione.

Auditing Administrators

I membri del ruolo server fisso sysadmin sono identificati come utente dbo in ogni database. Per controllare le azioni degli amministratori, controllare le azioni dell’utente dbo.

Creazione e gestione di audit con Transact-SQL

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

Istruzioni per la definizione dei dati

È possibile utilizzare le seguenti istruzioni DDL per creare, modificare e rilasciare le specifiche di controllo:

Dichiarazioni DDL Descrizione
ALTER AUTHORIZATION Modifica la proprietà di un securable.
ALTER DATABASE AUDIT SPECIFICATION Modifica un oggetto database audit specification utilizzando la funzione SQL Server Audit.
ALTER SERVER AUDIT Modifica un oggetto server audit utilizzando la funzione SQL Server Audit.
ALTER SERVER AUDIT SPECIFICATION Modifica un oggetto server audit specification utilizzando la funzione SQL Server Audit.
CREATE DATABASE AUDIT SPECIFICATION Crea un oggetto database audit specification utilizzando la funzione SQL Server audit.
CREA SERVER AUDIT Crea un oggetto server audit utilizzando SQL Server Audit.
CREATE SERVER AUDIT SPECIFICATION Crea un oggetto server audit specification utilizzando la funzione SQL Server Audit.
ELIMINARE LE SPECIFICHE DI CONTROLLO DEL DATABASE Elimina un oggetto di specifica di controllo del database utilizzando la funzione di controllo di SQL Server.
DROP SERVER AUDIT Elimina un oggetto Server Audit utilizzando la funzione SQL Server Audit.
DROP SERVER AUDIT SPECIFICATION Elimina un oggetto server audit specification utilizzando la funzione SQL Server Audit.

Viste e funzioni dinamiche

La tabella seguente elenca le viste e le funzioni dinamiche che è possibile utilizzare per il controllo di SQL Server.

Viste e funzioni dinamiche Descrizione
sys.dm_audit_actions Restituisce una riga per ogni azione di controllo che può essere segnalata nel registro di controllo e per 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 dell’audit.
sys.dm_audit_class_type_map Restituisce una tabella che associa il class_type campo nel registro di controllo per la class_desc campo in sys.dm_audit_actions.
fn_get_audit_file Restituisce le informazioni da un file di controllo creato da un server di controllo.

Viste catalogo

La tabella seguente elenca le viste catalogo che è possibile utilizzare per il controllo di SQL Server.

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

Autorizzazioni

Ogni funzione e comando per SQL Server Audit ha requisiti di autorizzazione individuali.

Per creare, modificare o eliminare una specifica di audit server o di Audit server, i principali server richiedono l’autorizzazione ALTER ANY SERVER AUDIT o CONTROL SERVER. Per creare, modificare o eliminare una specifica di controllo del database, i principi del database richiedono l’autorizzazione ALTER ANY DATABASE AUDIT o l’autorizzazione ALTER or CONTROL sul database. Inoltre, i presidi devono disporre dell’autorizzazione per connettersi al database o MODIFICARE LE autorizzazioni del SERVER AUDIT o CONTROL SERVER.

L’autorizzazione VISUALIZZA QUALSIASI DEFINIZIONE consente l’accesso per visualizzare le viste di controllo a livello di server e VISUALIZZA DEFINIZIONE consente l’accesso per visualizzare le viste di controllo a livello di database. La negazione di queste autorizzazioni sostituisce la possibilità di visualizzare le viste del catalogo, anche se l’entità ha l’opzione MODIFICA QUALSIASI CONTROLLO DEL SERVER o MODIFICA QUALSIASI autorizzazione di CONTROLLO DEL DATABASE.

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

Attenzione

I principali nel ruolo di amministratore di sistema possono manomettere qualsiasi componente di controllo e quelli nel ruolo db_owner possono manomettere le specifiche di controllo in un database. SQL Server Audit convaliderà che un accesso che crea o altera una specifica di audit abbia almeno l’autorizzazione ALTER ANY DATABASE AUDIT. Tuttavia, non esegue alcuna convalida quando si collega un database. Dovresti assumere che tutte le specifiche di controllo del database siano affidabili quanto quelle dei principali nel ruolo sysadmin o db_owner.

Creazione di un controllo server e specifiche di controllo server

Creazione di un controllo server e specifiche di controllo database

Visualizzazione di un registro di controllo SQL Server

Scrivere eventi di controllo SQL Server nel registro di sicurezza

Proprietà server (Pagina Sicurezza)
Spiega come attivare il controllo di accesso per SQL Server. I record di controllo vengono memorizzati nel registro delle applicazioni di Windows.

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

Categoria eventi di controllo di sicurezza (SQL Server Profiler)
Spiega gli eventi di controllo che è possibile utilizzare in SQL Server Profiler. Per ulteriori informazioni, vedere SQL Server Profiler.

SQL Trace
Spiega come SQL Trace può essere utilizzato all’interno delle proprie applicazioni per creare tracce manualmente, invece di utilizzare SQL Server Profiler.

Trigger DDL
Spiega come è possibile utilizzare i trigger DDL (Data Definition Language) per tenere traccia delle modifiche ai database.

Microsoft TechNet: Centro tecnico SQL Server: SQL Server 2005 Security and Protection
Fornisce informazioni aggiornate sulla sicurezza di SQL Server.

Vedere anche

Gruppi e azioni di controllo SQL Server
Record di controllo SQL Server