Condividi tramite


controllo SQL Server (motore di database)

Applies a:SQL ServerIstanza gestita di SQL di Azure

Auditing un'istanza del Motore di database di 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 verifiche del server, che possono contenere specifiche di verifica del server per gli eventi a livello di server e specifiche di verifica del database per gli eventi a livello di database. Gli eventi controllati possono essere scritti nei log eventi o in file di controllo.

Esistono diversi livelli di controllo per SQL Server, a seconda dei requisiti governativi o standard per l'installazione. SQL Server Audit fornisce gli strumenti e i processi necessari per abilitare, archiviare e visualizzare i controlli su vari oggetti server e di database.

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

Questo articolo si applica a SQL Server e Istanza gestita di SQL di Azure.

componenti di controllo SQL Server

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 dell'audit di SQL Server si combinano per produrre un output denominato audit, proprio come una definizione di report con elementi grafici e dati produce un report.

SQL Server controllo usa Eventi estesi per creare un controllo. Per altre informazioni sugli eventi estesi, vedere Panoramica degli eventi estesi.

Verifica SQL Server

L'oggetto SQL Server Audit raccoglie una singola 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, Questa è 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 di controllo del 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. Queste azioni vengono inviate alla verifica, che le registra nella destinazione.

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

Nota

A causa dei vincoli di prestazioni, tempdb e le tabelle temporanee non vengono sottoposte a verifica. Mentre il gruppo di azioni di completamento del batch acquisisce le istruzioni sulle tabelle temporanee, potrebbe non riportare correttamente i nomi degli oggetti. Tuttavia, la tabella di origine viene sempre controllata, per garantire che tutti gli inserimenti dalla tabella di origine alle tabelle temporanee vengano registrati.

Specifica di controllo del database

L'oggetto Database Audit Specification appartiene anche a un controllo SQL Server. È possibile creare una specifica di controllo del database per ogni SQL Server database per ogni controllo.

Nella specifica del controllo del database vengono raccolte azioni di controllo a livello di database generate dalla funzionalità degli eventi estesi. Alla specifica di controllo del database è possibile aggiungere gruppi di azioni di controllo o eventi di controllo. Eventi di audit sono le azioni atomiche che possono essere auditate 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. Queste azioni vengono inviate alla verifica, che le registra nella destinazione. Non includere oggetti con ambito server, come le visualizzazioni di sistema, in una specifica di controllo del database utente.

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

Destinazione

I risultati di un controllo vengono inviati a una destinazione, che può essere un file, il registro eventi protezione di Windows o il registro eventi dell'applicazione Windows. È necessario esaminare e archiviare periodicamente i log per garantire che nella destinazione sia disponibile 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 protezione di Windows ed è meno sicuro del registro eventi protezione di Windows.

Per scrivere nel registro di Sicurezza di Windows è necessario aggiungere l'account del servizio SQL Server alla politica Generare i controlli di sicurezza. Per impostazione predefinita, i sistemi Local System, Local Service e Network Service fanno parte di questa politica. Questa impostazione può essere configurata tramite lo snap-in dei criteri di sicurezza (secpol.msc) È inoltre necessario che i criteri di sicurezza Controllo dell'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 (e versioni successive), è possibile impostare i criteri più granulari generati dall'applicazione dalla riga di comando usando il programma dei criteri di controllo (AuditPol.exe). Per ulteriori informazioni sui passaggi per abilitare la scrittura nel log di Sicurezza di Windows, vedere Scrivere eventi di audit di SQL Server nel log 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 Windows sono globali per il sistema operativo Windows. Per altre informazioni sui registri eventi Windows, vedere Visualizzatore eventi Panoramica. Se sono necessarie autorizzazioni più specifiche sulla verifica, utilizzare la destinazione del file binario.

Quando si salvano informazioni di controllo in un file, per evitare manomissioni, è 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 le autorizzazioni di lettura e scrittura. Ciò presuppone che gli amministratori di controllo siano Windows account 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 in lettura.

Anche quando il motore di database sta scrivendo in un file, altri Windows utenti 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 account di accesso SQL Server con autorizzazione CONTROL SERVER possono usare il motore di database per accedere ai file di audit. In SQL Server 2022 (16.x) e versioni successive, l'autorizzazione VIEW SERVER SECURITY AUDIT è sufficiente per leggere i file di controllo usando fn_get_audit_file. 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 autorizzazione CONTROL SERVER che hanno eseguito l'accesso al file di audit tramite SQL Server. Per altre informazioni sulle fn_get_audit_file autorizzazioni, vedere sys.fn_get_audit_file.

Se un amministratore di controllo copia il file in un percorso diverso (ad esempio, per scopi di archiviazione e così via), gli elenchi di controllo di accesso (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 hanno accesso solo gli amministratori di controllo o i lettori di controllo. 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 una protezione aggiuntiva dall'accesso non autorizzato crittografando la cartella in cui è archiviato il file di controllo utilizzando Windows BitLocker Drive Encryption o Windows Encrypting File System.

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

Panoramica dell'uso di SQL Server Audit

È possibile usare SQL Server Management Studio o Transact-SQL per definire un controllo. Dopo aver creato e abilitato il controllo, l'obiettivo riceve le registrazioni.

È possibile leggere i registri eventi di Windows usando l'utilità Visualizzatore eventi in Windows. Per le destinazioni di 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 una verifica e definire l'obiettivo.
  2. Creare una specificazione di audit del server o una specificazione di audit del database che si mappa al controllo. Abilitare la specifica di audit.
  3. Abilitare il controllo.
  4. Leggere gli eventi di controllo usando Windows Visualizzatore eventi, Log File Viewer o la funzione fn_get_audit_file.

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

Considerazioni

In caso di errore durante l'avvio del controllo, il server non viene avviato. In questo caso, il server può essere avviato usando l'opzione -f nella riga di comando.

Quando un errore di controllo causa l'arresto o il mancato avvio del server perché ON_FAILURE = SHUTDOWN viene specificato per il controllo, l'evento MSG_AUDIT_FORCED_SHUTDOWN viene scritto nel log. Poiché l'arresto si verifica quando questa impostazione viene incontrata la prima volta, l'evento verrà scritto solo una volta. Tale evento viene scritto dopo il messaggio di errore di audit che causa l'arresto. Un amministratore può ignorare gli arresti indotti dal controllo avviando SQL Server in modalità utente singolo usando il flag -m. Se avvii in modalità Utente singolo, verrà eseguito il downgrade di qualsiasi audit in cui ON_FAILURE = SHUTDOWN è specificato per l'esecuzione in quella sessione come ON_FAILURE = CONTINUE. Quando SQL Server viene avviato con il flag , il messaggio />

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

Operazioni interne in Istanza gestita di SQL di Azure

  • In database SQL di Azure e Istanza gestita di SQL di Azure, gli eventi avviati da SQLDBControlPlaneFirstPartyApp sono una funzione Azure interna del piano di controllo database SQL di Azure. Gli eventi avviati da SQLDBControlPlaneFirstPartyApp fanno parte di un'operazione di sincronizzazione interna tra il motore SQL e Azure Resource Manager. Questi eventi sono una parte normale della gestione delle risorse e sono necessari per la rappresentazione e l'operazione corrette delle risorse in Azure.

Collegare un database con un controllo definito

Il caricamento di un database che ha una specifica di controllo e specifica un GUID che non esiste sul server, provoca una specifica di controllo orfana. Poiché nell'istanza del server non esiste un controllo con GUID corrispondente, non verrà registrato alcun evento di controllo. Per risolvere questa situazione, usare il ALTER DATABASE AUDIT SPECIFICATION comando per connettere la specifica del controllo orfano a un controllo del server esistente. In alternativa, usare il CREATE SERVER AUDIT comando per creare un nuovo controllo del server con il GUID specificato.

È possibile collegare un database con una specifica di controllo definita 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 controllo SQL Server

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

  • Il server mirror deve disporre di una verifica con lo stesso GUID affinché la specifica di verifica del database possa scrivere i record di verifica. Questa operazione può essere configurata usando 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 viene scritta la traccia di verifica.

  • 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 del servizio al registro eventi della sicurezza o dell'applicazione.

Attività di amministratore di controllo

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

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 di controllo del 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 principali del database richiedono l'autorizzazione ALTER ANY DATABASE AUDIT o l'autorizzazione ALTER o CONTROL sul database. Inoltre, i principali devono disporre del permesso per connettersi al database o ALTER ANY SERVER AUDIT o CONTROL SERVER permessi.

L'autorizzazione VIEW ANY DEFINITION fornisce l'accesso per visualizzare le viste di controllo a livello di server e VIEW DEFINITION fornisce l'accesso per visualizzare le viste di controllo a livello di database. La negazione di queste autorizzazioni annulla la possibilità di visualizzare le viste del catalogo, anche se il principale dispone delle autorizzazioni ALTER ANY SERVER AUDIT o ALTER ANY DATABASE AUDIT.

Per leggere i dati di controllo usando fn_get_audit_file, SQL Server 2019 (15.x) e versioni precedenti richiedono CONTROL SERVER autorizzazione per il server, mentre SQL Server 2022 (16.x) e versioni successive richiedono VIEW SERVER SECURITY AUDIT autorizzazione. Per altre informazioni, vedere sys.fn_get_audit_file.

Per altre informazioni su come concedere diritti e autorizzazioni, vedere GRANT.

Attenzione

Le entità nel ruolo sysadmin possono manomettere qualsiasi componente di controllo e le entità nel ruolo db_owner possono manomettere le specifiche di controllo in un database. SQL Server Audit verifica 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. Dovresti assumere che tutte le specifiche di controllo del database siano attendibili solo quanto quei principali nel ruolo sysadmin o db_owner.

Creare e gestire i controlli con Transact-SQL

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

Istruzioni del linguaggio di definizione dei dati

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

Istruzioni DDL Descrizione
ALTER AUTHORIZATION Modifica la proprietà di un oggetto proteggibile.
ALTER DATABASE AUDIT SPECIFICATION Modifica un oggetto specifica del controllo del database usando la funzionalità SQL Server Audit.
ALTER SERVER AUDIT Modifica un oggetto controllo server utilizzando la funzionalità SQL Server Audit.
MODIFICARE LA SPECIFICA DI AUDIT DEL SERVER Modifica un oggetto specifica del controllo del server utilizzando la funzionalità SQL Server Audit.
CREARE UNA SPECIFICA DI AUDIT DEL DATABASE Crea un oggetto specifica del controllo del database usando la funzionalità di controllo SQL Server.
CREATE SERVER AUDIT Crea un oggetto controllo server utilizzando SQL Server Audit.
CREATE SERVER AUDIT SPECIFICATION Crea un oggetto specifica di audit del server utilizzando la funzionalità SQL Server Audit.
DROP DATABASE AUDIT SPECIFICATION (Rimuovere la specifica di audit del database) Elimina un oggetto "database audit specification" utilizzando la funzionalità SQL Server Audit.
DROP SERVER AUDIT Elimina un oggetto di verifica del server usando la funzionalità di audit di SQL Server.
DROP SERVER AUDIT SPECIFICATION Elimina un oggetto specifica del controllo del server usando la funzionalità SQL Server Audit.

Viste e funzioni dinamiche

Nella tabella seguente sono elencate le visualizzazioni dinamiche e le funzioni da usare per l'auditing 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 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 collega il 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.

Visualizzazioni del catalogo

Nella tabella seguente sono elencate le viste del catalogo che è possibile usare per l'audit di SQL Server.

Visualizzazioni del catalogo Descrizione
sys.database_audit_specifications Contiene informazioni sulle specifiche di verifica del database in un audit di 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 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 dell'audit del server in un controllo SQL Server su un'istanza del server.
sys.server_audit_specifications_dettagli 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.

Passo successivo