Freigeben über


CREATE SERVER AUDIT (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Erstellt ein Serverüberwachungsobjekt mithilfe von SQL Server Audit. Weitere Informationen finden Sie unter SQL Server Audit (Datenbank-Engine).

Transact-SQL-Syntaxkonventionen

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 } ]
}

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

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

Argumente

TO { DATEI | ANWENDUNGSPROTOKOLL | SICHERHEITSPROTOKOLL | URL | EXTERER_MONITOR }

Legt den Speicherort des Überwachungsziels fest. Die Optionen sind eine Binärdatei, das Windows-Anwendungsprotokoll oder das Windows-Sicherheitsprotokoll. SQL Server kann nicht in das Windows-Sicherheitsprotokoll schreiben, ohne zusätzliche Einstellungen in Windows zu konfigurieren. Weitere Informationen finden Sie unter Schreiben von SQL-Serverüberwachungsereignissen in das Sicherheitsprotokoll.

Das URL-Ziel wird nicht für SQL Server unterstützt.

Wichtig

In Azure SQL Managed Instance funktioniert die SQL-Überwachung auf Serverebene. Als Speicherorte ist nur URL oder EXTERNAL_MONITOR möglich.

FILEPATH = 'os_file_path'

Der Pfad des Überwachungsprotokolls. Der Dateiname wird auf der Grundlage des Überwachungsnamens und des Überwachungs-GUID generiert. Wenn dieser Pfad ungültig ist, wird die Überwachung nicht erstellt.

Das FILEPATH-Ziel wird für Azure SQL verwaltete Instanz nicht unterstützt. Stattdessen müssen Sie PATH verwenden.

MAXSIZE = max_size

Gibt die maximale Größe an, die die Überwachungsdatei annehmen kann. Der Wert von max_size muss eine ganze Zahl gefolgt von MB, GB, TB oder UNLIMITED sein. Die minimale Größe, die Sie für max_size angeben können, beträgt 2 MB, und die maximale Größe beträgt 2.147.483.647 TB. Wird UNLIMITED angegeben, kann die Größe der Datei so lange zunehmen, bis auf dem Datenträger kein Speicherplatz mehr verfügbar ist. (0 steht ebenfalls für UNLIMITED.) Die Angabe eines Werts kleiner als 2 MB löst den Fehler MSG_MAXSIZE_TOO_SMALL aus. Der Standardwert ist UNLIMITED.

Das MAXSIZE-Ziel wird für Azure SQL verwaltete Instanz nicht unterstützt.

MAX_ROLLOVER_FILES = { integer | UNLIMITED }

Gibt die maximale Anzahl der Dateien an, die im Dateisystem zusätzlich zur aktuellen Datei beibehalten werden. Der MAX_ROLLOVER_FILES-Wert muss eine ganze Zahl oderUNLIMITED sein. Der Standardwert ist UNLIMITED. Dieser Parameter wird ausgewertet, sobald die Überwachung neu gestartet wird (z.B. wenn die Instanz von Datenbank-Engine neu gestartet oder die Überwachung deaktiviert und wieder aktiviert wird) oder wenn eine neue Datei benötigt wird, da MAXSIZE erreicht wurde. Wenn die Anzahl der Dateien bei der Auswertung des Werts von MAX_ROLLOVER_FILES die Einstellung für MAX_ROLLOVER_FILES überschreitet, wird die älteste Datei gelöscht. Wenn die Einstellung für MAX_ROLLOVER_FILES 0 lautet, wird folglich bei jeder Auswertung der Einstellung für MAX_ROLLOVER_FILES eine neue Datei erstellt. Bei der Auswertung der Einstellung für MAX_ROLLOVER_FILES wird nur eine Datei automatisch gelöscht. Wenn der Wert von MAX_ROLLOVER_FILES also sinkt, verringert sich die Anzahl der Dateien nur dann, wenn alte Dateien manuell gelöscht werden. Der Maximalwert für die Anzahl der Dateien beträgt 2.147.483.647.

MAX_ROLLOVER_FILES wird für Azure SQL Managed Instance nicht unterstützt.

MAX_FILES = integer

Gilt für: SQL Server 2012 (11.x) und höher.

Gibt die maximale Anzahl von Überwachungsdateien an, die erstellt werden können. Führt keinen Rollover zur ersten Datei aus, wenn die Grenze erreicht wird. Wenn die MAX_FILES-Grenze erreicht wird, schlägt jede Aktion fehl, die zusätzliche Überwachungsereignisse nach sich zieht.

RESERVE_DISK_SPACE = { ON | OFF }

Diese Option ordnet der Datei auf dem Datenträger den MAXSIZE-Wert zu. Sie gilt nur, wenn MAXSIZE sie nicht gleich UNLIMITED ist. Der Standardwert ist OFF.

Das RESERVE_DISK_SPACE-Ziel wird für Azure SQL verwaltete Instanz nicht unterstützt.

QUEUE_DELAY = integer

Gibt den Zeitraum in Millisekunden an, der verstreichen kann, bevor die Verarbeitung von Überwachungsaktionen erzwungen wird. Der Wert 0 steht für eine synchrone Übermittlung. Der minimale festlegbare Abfrageverzögerungswert ist 1000 (1 Sekunde), was auch der Standardwert ist. Der maximale Wert beträgt 2147483647 (2.147.483,647 Sekunden oder 24 Tage, 20 Stunden, 31 Minuten und 23.647 Sekunden). Wenn Sie eine ungültige Zahl angeben, wird der MSG_INVALID_QUEUE_DELAY-Fehler ausgelöst.

ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }

Gibt an, ob die an das Ziel ausgebende Instanz SQL Server fehlschlagen lassen, fortsetzen oder beenden soll, wenn das Ziel keine Daten in das Überwachungsprotokoll schreiben kann. Der Standardwert ist CONTINUE.

CONTINUE

SQL Server -Vorgänge werden fortgesetzt. Überwachungsdatensätze werden nicht beibehalten. Bei der Überwachung wird weiterhin versucht, Ereignisse zu protokollieren. Sie wird fortgesetzt, wenn die Fehlerbedingung aufgelöst wurde. Durch Auswählen der Continue-Option können unter Umständen nicht überwachte Aktivitäten ausgeführt werden, die gegen Ihre Sicherheitsrichtlinien verstoßen könnten. Verwenden Sie diese Option, wenn die weitere Verwendung von Datenbank-Engine wichtiger als die Beibehaltung einer vollständigen Überwachung ist.

SHUTDOWN

Erzwingt, dass die Instanz von SQL Server heruntergefahren wird, falls SQL Server aus irgendeinem Grund keine Daten in das Überwachungsziel schreiben kann. Die Anmeldung, bei der die CREATE SERVER AUDIT-Anweisung ausgeführt wird, muss über die SHUTDOWN-Berechtigung in SQL Server verfügen. Das Herunterfahren wird auch dann fortgesetzt, wenn die SHUTDOWN-Berechtigung später von der ausführenden Anmeldung widerrufen wird. Wenn der Benutzer nicht über diese Berechtigung verfügt, schlägt die Anweisung fehl, und die Überwachung wird nicht erstellt. Verwenden Sie die Option, wenn ein Überwachungsfehler die Sicherheit oder die Integrität des Systems beeinträchtigen konnte. Weitere Informationen finden Sie unter SHUTDOWN.

FAIL_OPERATION

Gilt für: SQL Server 2012 (11.x) und höher.

Datenbankaktionen schlagen fehl, wenn sie überwachte Ereignisse verursachen. Aktionen, die keine überwachten Ereignisse verursachen, können fortgesetzt werden, es können jedoch keine überwachten Ereignisse auftreten. Bei der Überwachung wird weiterhin versucht, Ereignisse zu protokollieren. Sie wird fortgesetzt, wenn die Fehlerbedingung aufgelöst wurde. Verwenden Sie diese Option, wenn die Beibehaltung einer vollständigen Überwachung wichtiger als der Vollzugriff auf Datenbank-Engine ist.

AUDIT_GUID = uniqueidentifier

Um Szenarien, wie beispielsweise Datenbankspiegelung unterstützen zu können, benötigt eine Überwachung einen bestimmten GUID, der dem GUID in der gespiegelten Datenbank entspricht. Der GUID kann, nachdem die Überwachung erstellt wurde, nicht mehr geändert werden.

OPERATOR_AUDIT

Gilt mnur für: Azure SQL Managed Instance.

Gibt an, ob die Überwachung die Vorgänge von Microsoft-Supporttechnikern erfasst, wenn sie während einer Supportanfrage auf Ihren Server zugreifen müssen.

predicate_expression

Gilt für: SQL Server 2012 (11.x) und höhere Versionen.

Gibt den Prädikatausdruck an, mit dessen Hilfe bestimmt wird, ob ein Ereignis verarbeitet werden muss. Die Länge von Prädikatausdrücken ist auf 3.000 Zeichen beschränkt, wodurch die Länge von Zeichenfolgenargumenten eingeschränkt wird.

event_field_name

Gilt für: SQL Server 2012 (11.x) und höhere Versionen.

Der Name des Ereignisfelds, das die Prädikatquelle identifiziert. Überwachungsfelder werden in sys.fn_get_audit_file (Transact-SQL) beschrieben. Mit Ausnahme von file_name, audit_file_offset und event_time können alle Felder gefiltert werden.

Hinweis

Während die Felder action_id und class_type den Datentyp varchar in sys.fn_get_audit_file aufweisen, können sie nur mit Zahlen verwendet werden, wenn sie eine Prädikatquelle für die Filterung darstellen. Führen Sie die folgende Abfrage aus, um die Liste der mit class_type zu verwendenden Werte abzurufen:

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

Zahl

Gilt für: SQL Server 2012 (11.x) und höhere Versionen.

Jeder numerische Typ einschließlich decimal. Einschränkungen stellen der verfügbare physische Speicher oder eine Zahl dar, die zu groß ist, um als 64-Bit-Ganzzahl dargestellt werden zu können.

'Zeichenfolge'

Gilt für: SQL Server 2012 (11.x) und höhere Versionen.

Entweder eine ANSI- oder Unicode-Zeichenfolge, die vom Prädikatvergleich verlangt wird. Für die Prädikatvergleichsfunktionen wird keine implizite Zeichenfolgentypkonvertierung ausgeführt. Die Übergabe des falschen Typs führt zu einem Fehler.

Hinweise

Wenn eine Serverüberwachung erstellt wird, befindet sie sich im deaktivierten Zustand.

Die CREATE SERVER AUDIT-Anweisung liegt im Bereich einer Transaktion. Wird ein Rollback für die Transaktion ausgeführt, so wird auch für die Anweisung ein Rollback durchgeführt.

Berechtigungen

Um eine Serverüberwachung zu erstellen, zu ändern oder zu löschen, benötigen Prinzipale die ALTER ANY SERVER AUDITT-Berechtigung oder die CONTROL SERVER-Berechtigung.

Schränken Sie beim Speichern von Überwachungsinformationen in einer Datei den Zugriff auf deren Speicherort ein, um eine Manipulation zu verhindern.

Beispiele

A. Erstellen einer Serverüberwachung mit einem Dateiziel

Im folgenden Beispiel wird eine Serverüberwachung namens HIPAA_Audit mit einer Binärdatei als Ziel und ohne weitere Optionen erstellt.

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

B. Erstellen einer Serverüberwachung mit einem Windows-Anwendungsprotokollziel und Optionen

Im folgenden Beispiel wird eine Serverüberwachung namens HIPAA_Audit mit dem Windows-Ereignisprotokoll als Ziel erstellt. Die Warteschlange wird jede Sekunde geschrieben und fährt bei einem Fehler die SQL Server-Engine herunter.

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

C. Erstellen einer Serverüberwachung, die eine WHERE-Klausel enthält

Im folgenden Beispiel werden eine Datenbank, ein Schema und zwei Tabellen für das Beispiel erstellt. Die Tabelle mit dem Namen DataSchema.SensitiveData enthält vertrauliche Daten. Der Zugriff auf die Tabelle muss bei der Überwachung aufgezeichnet werden. Die Tabelle DataSchema.GeneralData beinhaltet keine vertraulichen Daten. Die Datenbank-Überwachungsspezifikation überwacht den Zugriff auf alle Objekte im DataSchema-Schema. Die Serverüberwachung wird mit einer WHERE-Klausel erstellt, die die Serverüberwachung ausschließlich auf die SensitiveData-Tabelle beschränkt. Bei der Serverüberwachung wird angenommen, dass unter C:\SQLAudit ein Überwachungsordner vorhanden ist.

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
-- Create the server audit in the master database
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
-- Create the database audit specification in the TestDB database
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess]
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO