CRÉATION D’UN AUDIT DE SERVEUR (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Crée un objet d’audit de serveur à l’aide de SQL Server Audit. Pour plus d’informations, consultez Audit SQL Server (moteur de base de données).

Conventions de la syntaxe Transact-SQL

Syntax

CREATE SERVER AUDIT audit_name
{
    TO {
        [ FILE ( <file_options> [ ,... n ] ) ]
        | APPLICATION_LOG
        | SECURITY_LOG
        | URL
        | EXTERNAL_MONITOR
    }
    [ WITH ( <audit_options> [ ,... n ] ) ]
    [ WHERE <predicate_expression> ]
}
[ ; ]

<file_options> ::=
{
    FILEPATH = 'os_file_path'
    [ , MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
    [ , { MAX_ROLLOVER_FILES = { integer | UNLIMITED } } | { MAX_FILES = integer } ]
    [ , RESERVE_DISK_SPACE = { ON | OFF } ]
}

<audit_options> ::=
{
    [ QUEUE_DELAY = integer ]
    [ , ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION } ]
    [ , AUDIT_GUID = uniqueidentifier ]
    [ , OPERATOR_AUDIT = { ON | OFF } ]
    [ , RETENTION_DAYS = integer ]
}

<predicate_expression> ::=
    { [ NOT ] <predicate_factor>
    [ { AND | OR } [ NOT ] { <predicate_factor> } ] [ ,... n ] }

<predicate_factor> ::=
    event_field_name { = | < > | != | > | >= | < | <= | LIKE }
    { number | 'string' }

Arguments

audit_name

Nom de l’audit. SQL Server 2019 (15.x) et les versions antérieures ne peuvent pas contenir d’espaces dans le nom d’audit.

À { FICHIER | APPLICATION_LOG | SECURITY_LOG | Lien URL | EXTERNAL_MONITOR }

Détermine l'emplacement de la cible de l'audit. Les options sont un fichier binaire, le journal des applications Windows ou le journal de sécurité Windows. SQL Server ne peut pas écrire dans le journal de sécurité Windows sans configurer des paramètres supplémentaires dans Windows. Pour plus d’informations, consultez Écrire des événements d’audit SQL Server dans le journal de sécurité.

La cible URL n’est pas prise en charge pour SQL Server.

Important

Dans Azure SQL Managed Instance, l’audit SQL fonctionne au niveau du serveur. Les emplacements peuvent uniquement être URL ou EXTERNAL_MONITOR.

CHEMIN D’ACCÈS AU FICHIER = 'os_file_path'

Chemin d'accès du journal d'audit. Le nom de fichier est généré en fonction du nom d'audit et du GUID d'audit. Si ce chemin n’est pas valide, l’audit n’est pas créé.

FILEPATH la cible n’est pas prise en charge pour Azure SQL Managed Instance. Vous devrez utiliser plutôt PATH.

MAXSIZE = max_size

Taille maximale que peut atteindre le fichier d'audit. La valeur max_size doit être un entier suivi de Mo, Go, To ou UNLIMITED. La taille minimale que vous pouvez spécifier pour max_size est 2 MB et la taille maximale est 2 147 483 647 TB. Lorsque vous spécifiez UNLIMITED, le fichier augmente jusqu’à ce que le disque soit plein. (0 indique également UNLIMITED.) La spécification d'une valeur inférieure à 2 Mo entraîne l'erreur MSG_MAXSIZE_TOO_SMALL. La valeur par défaut est UNLIMITED.

MAXSIZE la cible n’est pas prise en charge pour Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { entier | ILLIMITÉ }

Spécifie le nombre maximal de fichiers à conserver dans le système de fichiers en plus du fichier actuel. La valeur MAX_ROLLOVER_FILES doit être un entier ou UNLIMITED. La valeur par défaut est UNLIMITED. Ce paramètre est évalué chaque fois que l’audit redémarre (ce qui peut se produire quand l’instance du Moteur de base de données redémarre ou quand l’audit est désactivé, puis réactivé) ou qu’un nouveau fichier est nécessaire car MAXSIZE a été atteinte. Quand MAX_ROLLOVER_FILES est évalué, si le nombre de fichiers dépasse la valeur du paramètre MAX_ROLLOVER_FILES, le fichier le plus ancien est supprimé. En conséquence, lorsque le paramètre de MAX_ROLLOVER_FILES est 0, un nouveau fichier est créé chaque fois que le paramètre de MAX_ROLLOVER_FILES est évalué. Un seul fichier est automatiquement supprimé lorsque MAX_ROLLOVER_FILES paramètre est évalué, de sorte que lorsque la valeur de MAX_ROLLOVER_FILES est diminuée, le nombre de fichiers ne diminue pas, à moins que les anciens fichiers ne soient supprimés manuellement. Le nombre maximal de fichiers que vous pouvez spécifier est de 2 147 483 647.

MAX_ROLLOVER_FILES n’est pas pris en charge pour Azure SQL Managed Instance.

MAX_FILES =entier

Spécifie le nombre maximal de fichiers d'audit qui peuvent être créés. L’audit ne passe pas au premier fichier lorsque la limite est atteinte. Lorsque la MAX_FILES limite est atteinte, toute action qui provoque la génération d’événements d’audit supplémentaires échoue avec une erreur.

RESERVE_DISK_SPACE = { ACTIVÉ | DÉSACTIVÉ }

Cette option pré affecte le fichier sur le disque à la valeur MAXSIZE. Il s’applique uniquement si MAXSIZE n’est pas égal à UNLIMITED. La valeur par défaut est OFF.

RESERVE_DISK_SPACE la cible n’est pas prise en charge pour Azure SQL Managed Instance.

QUEUE_DELAY =entier

Détermine la durée, en millisecondes, qui peut s’écouler avant que le traitement des actions d’audit soit forcé. Une valeur de 0 indique la remise synchrone. La valeur minimale du délai de requête définissable est 1000 (1 seconde), qui est la valeur par défaut. Le maximum est 2147483647 (2 147 483,647 secondes ou 24 jours, 20 heures, 31 minutes, 23 647 secondes). La spécification d’un nombre non valide déclenche l’erreur MSG_INVALID_QUEUE_DELAY.

ON_FAILURE = { CONTINUER | ARRÊT | FAIL_OPERATION }

Indique si l'instance qui écrit dans la cible doit échouer, continuer ou arrêter SQL Server si la cible ne peut pas écrire dans le journal d'audit. La valeur par défaut est CONTINUE.

CONTINUE

SQL Server Les opérations continuent. Les enregistrements d'audit ne sont pas conservés. L’audit poursuit sa tentative de journalisation des événements et reprend les opérations d’enregistrement une fois la condition d’échec résolue. La sélection de l’option CONTINUE peut permettre l’exécution d’une activité non auditée susceptible d’enfreindre vos stratégies de sécurité. Utilisez cette option quand la poursuite de l’opération du Moteur de base de données est plus importante que la conservation d’un audit complet.

SHUTDOWN

Force l’instance de SQL Server à s’arrêter, si SQL Server ne parvient pas à écrire des données dans la cible d’audit pour une raison quelconque. Le compte de connexion exécutant l’instruction CREATE SERVER AUDIT doit disposer de l’autorisation SHUTDOWN dans SQL Server. Le comportement d’arrêt persiste même si l’autorisation SHUTDOWN est révoquée ultérieurement du compte de connexion en cours d’exécution. Si l’utilisateur n’a pas cette autorisation, l’instruction échoue et l’audit n’est pas créé. Utilisez cette option si une défaillance de l'audit risque de compromettre la sécurité ou l'intégrité du système. Pour plus d’informations, consultez SHUTDOWN.

FAIL_OPERATION

Les actions de base de données échouent si elles entraînent des événements audités. Les actions qui ne provoquent pas d’événements audités peuvent continuer, mais aucun événement audité ne peut se produire. L’audit poursuit sa tentative de journalisation des événements et reprend les opérations d’enregistrement une fois la condition d’échec résolue. Utilisez cette option lorsqu'il est plus important de conserver un audit complet que de disposer d'un accès complet au Moteur de base de données.

AUDIT_GUID = identificateur unique

Pour prendre en charge des scénarios tels que la mise en miroir de bases de données ou les bases de données participant à un groupe de disponibilité Always On, un audit a besoin d’un GUID spécifique qui correspond au GUID trouvé dans la base de données mise en miroir. Vous ne pouvez pas modifier le GUID après avoir créé l’audit.

OPERATOR_AUDIT

S’applique uniquement à : Azure SQL Managed Instance.

Indique si l'audit capture les opérations des ingénieurs du support Microsoft lorsqu'ils doivent accéder à votre serveur dans le cadre d'une demande de support.

RETENTION_DAYS = entier

S’applique uniquement à : Azure SQL Managed Instance et Azure SQL Database.

Indique le nombre de jours pour stocker le fichier journal d’audit.

predicate_expression

Spécifie l'expression de prédicat utilisée pour déterminer si un événement doit ou non être traité. Les expressions de prédicat sont limitées à une longueur de 3 000 caractères, ce qui limite les arguments de chaîne.

event_field_name

Nom du champ d'événement qui identifie la source de prédicat. Les champs d’audit sont décrits dans sys.fn_get_audit_file. Vous pouvez filtrer tous les champs à l’exception file_namede , audit_file_offsetet event_time.

Bien que les champs et class_type les action_id champs soient de type varchar insys.fn_get_audit_file, vous ne pouvez les utiliser qu’avec des nombres lorsqu’ils sont une source de prédicat pour le filtrage. Pour obtenir la liste des valeurs à utiliser avec class_type, exécutez la requête suivante :

SELECT spt.[name], spt.[number]
FROM [master].[dbo].[spt_values] spt
WHERE spt.[type] = N'EOD'
ORDER BY spt.[name];

numéro

N’importe quel type numérique, y compris décimal. Le manque de mémoire physique ou un nombre trop grand pour être représenté sous forme d'entier 64 bits sont les seules limitations.

'string'

Chaîne ANSI ou Unicode, comme requis par la comparaison de prédicat. Les fonctions de comparaison de prédicats n’effectuent aucune conversion de type de chaîne implicite. La transmission d'un type incorrect provoque une erreur.

Remarks

Un audit de serveur est créé dans un état désactivé.

L’instruction CREATE SERVER AUDIT fait partie d’une transaction. Si vous restaurez la transaction, l’instruction est également restaurée.

Permissions

Pour créer, modifier ou supprimer un audit de serveur, les principaux ont besoin de l’autorisation ALTER ANY SERVER AUDIT ou de l’autorisation CONTROL SERVER .

Lorsque vous enregistrez des informations d’audit dans un fichier, limitez l’accès à l’emplacement du fichier pour empêcher la falsification.

Examples

A. Créer un audit de serveur avec un fichier cible

L’exemple suivant crée un audit de serveur nommé HIPAA_Audit avec un fichier binaire comme cible et aucune option.

CREATE SERVER AUDIT HIPAA_Audit
TO FILE (FILEPATH = '\\SQLPROD_1\Audit\');

B. Créer un audit de serveur avec une cible de journal d'application Windows avec des options

L’exemple suivant crée un audit de serveur nommé HIPAA_Audit avec l’ensemble cible pour le journal des applications Windows. La file d'attente est écrite chaque seconde et arrête le moteur SQL Server en cas d'échec.

CREATE SERVER AUDIT HIPAA_Audit
TO APPLICATION_LOG
WITH (
    QUEUE_DELAY = 1000,
    ON_FAILURE = SHUTDOWN
);

C. Créer un audit de serveur contenant une clause WHERE

L'exemple suivant crée une base de données, un schéma et deux tables pour l'exemple. La table DataSchema.SensitiveData contient des données confidentielles et tout accès à cette table doit être enregistré dans l’audit.

La table nomméDataSchema.GeneralData ne contient pas de données confidentielles. La spécification de l'audit de la base de données audite les accès à tous les objets du schéma DataSchema.

L’audit du serveur est créé avec une WHERE clause qui limite l’audit du serveur à la SensitiveData table uniquement. L’audit du serveur présume qu’un dossier d’audit existe dans C:\SQLAudit.

CREATE DATABASE TestDB;
GO

USE TestDB;
GO

CREATE SCHEMA DataSchema;
GO

CREATE TABLE DataSchema.GeneralData
(
    ID INT PRIMARY KEY,
    DataField VARCHAR (50) NOT NULL
);
GO

CREATE TABLE DataSchema.SensitiveData
(
    ID INT PRIMARY KEY,
    DataField VARCHAR (50) NOT NULL
);
GO

Créez l’audit du serveur dans la master base de données :

USE master;
GO

CREATE SERVER AUDIT AuditDataAccess TO FILE (FILEPATH = 'C:\SQLAudit\')
    WHERE object_name = 'SensitiveData';
GO

ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO

Créez la spécification d’audit de base de données dans la TestDB base de données :

USE TestDB;
GO

CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
    FOR SERVER AUDIT [AuditDataAccess]
    ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
    WITH(STATE = ON);
GO

Déclenchez l’événement d’audit en sélectionnant dans les tables :

SELECT ID,
       DataField
FROM DataSchema.GeneralData;

SELECT ID,
       DataField
FROM DataSchema.SensitiveData;
GO

Vérifiez l’audit du contenu filtré :

SELECT *
FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit', DEFAULT, DEFAULT);
GO

Transact-SQL référence