SERVERAUDIT MAKEN (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Hiermee maakt u een servercontroleobject met behulp van SQL Server Audit. Zie SQL Server Audit (Database Engine) voor meer informatie.

Transact-SQL syntaxis-conventies

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

De naam van de audit. SQL Server 2019 (15.x) en eerdere versies mogen geen spaties bevatten in de auditnaam.

NAAR { BESTAND | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }

Bepaalt de locatie van het controledoel. De opties zijn een binair bestand, het Windows-toepassingslogboek of het Windows-beveiligingslogboek. SQL Server kan niet schrijven naar het Windows-beveiligingslogboek zonder extra instellingen in Windows te configureren. Zie Sql Server-auditgebeurtenissen schrijven naar het beveiligingslogboek voor meer informatie.

Het URL doel wordt niet ondersteund voor SQL Server.

Important

In Azure SQL Managed Instance werkt SQL Audit op serverniveau. Locaties kunnen alleen of URLEXTERNAL_MONITOR.

FILEPATH = 'os_file_path'

Het pad van het auditlogboek. De bestandsnaam wordt gegenereerd op basis van de auditnaam en de audit-GUID. Als dit pad ongeldig is, wordt de controle niet gemaakt.

FILEPATH het doel wordt niet ondersteund voor Azure SQL Managed Instance. U moet in plaats daarvan gebruiken PATH .

MAXSIZE = max_size

Hiermee geeft u de maximale grootte op waarop het auditbestand kan groeien. De max_size waarde moet een geheel getal zijn gevolgd door MB, GB, TB of UNLIMITED. De minimale grootte die u kunt opgeven voor max_size is 2 MB en het maximum is 2.147.483.647 TB. Wanneer u opgeeft UNLIMITED, groeit het bestand totdat de schijf vol is. (0 geeft ook aan UNLIMITED.) Als u een waarde opgeeft die lager is dan 2 MB, wordt de fout gegenereerd MSG_MAXSIZE_TOO_SMALL. De standaardwaarde is UNLIMITED.

MAXSIZE het doel wordt niet ondersteund voor Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { geheel getal | ONBEPERKT }

Hiermee geeft u het maximum aantal bestanden dat moet worden bewaard in het bestandssysteem naast het huidige bestand. De MAX_ROLLOVER_FILES waarde moet een geheel getal of UNLIMITEDeen geheel getal zijn. De standaardwaarde is UNLIMITED. Deze parameter wordt geëvalueerd wanneer de controle opnieuw wordt opgestart (wat kan gebeuren wanneer het exemplaar van de database-engine opnieuw wordt opgestart of wanneer de controle is uitgeschakeld en vervolgens weer wordt ingeschakeld) of wanneer een nieuw bestand nodig is omdat het MAXSIZE is bereikt. Wanneer MAX_ROLLOVER_FILES wordt geëvalueerd, wordt het oudste bestand verwijderd als het aantal bestanden groter is dan de MAX_ROLLOVER_FILES instelling. Als de instelling MAX_ROLLOVER_FILES 0 is, wordt er dus telkens wanneer de MAX_ROLLOVER_FILES instelling wordt geëvalueerd een nieuw bestand gemaakt. Er wordt slechts één bestand automatisch verwijderd wanneer MAX_ROLLOVER_FILES de instelling wordt geëvalueerd, dus wanneer de waarde MAX_ROLLOVER_FILES afneemt, wordt het aantal bestanden niet verkleind, tenzij oude bestanden handmatig worden verwijderd. Het maximum aantal bestanden dat u kunt opgeven is 2.147.483.647.

MAX_ROLLOVER_FILES wordt niet ondersteund voor Azure SQL Managed Instance.

MAX_FILES = geheel getal

Hiermee geeft u het maximum aantal controlebestanden op dat kan worden gemaakt. De controle wordt niet overgeschakeld naar het eerste bestand wanneer de limiet is bereikt. Wanneer de MAX_FILES limiet is bereikt, mislukt elke actie die ervoor zorgt dat meer controlegebeurtenissen worden gegenereerd, mislukt met een fout.

RESERVE_DISK_SPACE = { ON | UIT }

Met deze optie wordt het bestand op de schijf vooraf toegewezen aan de MAXSIZE waarde. Deze is alleen van toepassing als MAXSIZE deze niet gelijk is aan UNLIMITED. De standaardwaarde is OFF.

RESERVE_DISK_SPACE het doel wordt niet ondersteund voor Azure SQL Managed Instance.

QUEUE_DELAY = geheel getal

Bepaalt de tijd, in milliseconden, die kan verstrijken voordat controleacties worden gedwongen te worden verwerkt. Een waarde van 0 geeft synchrone levering aan. De minimumwaarde voor ingestelde queryvertraging is 1000 (1 seconde). Dit is de standaardwaarde. Het maximum is 2147483647 (2.147.483.647 seconden of 24 dagen, 20 uur, 31 minuten, 23,647 seconden). Als u een ongeldig nummer opgeeft, wordt de MSG_INVALID_QUEUE_DELAY fout gegenereerd.

ON_FAILURE = { CONTINUE | AFSLUITEN | FAIL_OPERATION }

Hiermee wordt aangegeven of het schrijven van het exemplaar naar het doel moet mislukken, doorgaan of stoppen als het doel niet naar het auditlogboek kan schrijven. De standaardwaarde is CONTINUE.

CONTINUE

SQL Server-bewerkingen worden voortgezet. Controlerecords worden niet bewaard. De controle blijft proberen gebeurtenissen te registreren en hervat als de foutvoorwaarde is opgelost. Als u de optie Doorgaan selecteert, kunt u niet-gecontroleerde activiteiten toestaan, die uw beveiligingsbeleid kunnen schenden. Gebruik deze optie als u de database-engine blijft gebruiken, is het belangrijker dan het onderhouden van een volledige controle.

SHUTDOWN

Dwingt het exemplaar van SQL Server af te sluiten als SQL Server om welke reden dan ook geen gegevens naar het controledoel schrijft. De aanmelding die de CREATE SERVER AUDIT instructie uitvoert, moet de SHUTDOWN machtiging hebben binnen SQL Server. Het afsluitgedrag blijft behouden, zelfs als de SHUTDOWN machtiging later wordt ingetrokken bij het uitvoeren van de aanmelding. Als de gebruiker niet over deze machtiging beschikt, mislukt de instructie en wordt de controle niet gemaakt. Gebruik de optie wanneer een controlefout de beveiliging of integriteit van het systeem kan misbruiken. Zie AFSLUITEN voor meer informatie.

FAIL_OPERATION

Databaseacties mislukken als ze gecontroleerde gebeurtenissen veroorzaken. Acties die geen gecontroleerde gebeurtenissen veroorzaken, kunnen worden voortgezet, maar er kunnen geen gecontroleerde gebeurtenissen optreden. De controle blijft proberen gebeurtenissen te registreren en hervat als de foutvoorwaarde is opgelost. Gebruik deze optie bij het onderhouden van een volledige controle belangrijker dan volledige toegang tot de database-engine.

AUDIT_GUID = unieke identificatiecode

Ter ondersteuning van scenario's zoals databasespiegeling of databases die deelnemen aan een AlwaysOn-beschikbaarheidsgroep, heeft een audit een specifieke GUID nodig die overeenkomt met de GUID in de gespiegelde database. U kunt de GUID niet wijzigen nadat u de controle hebt gemaakt.

OPERATOR_AUDIT

Van toepassing op: alleen Azure SQL Managed Instance.

Hiermee wordt aangegeven of tijdens een ondersteuningsaanvraag bewerkingen van Microsoft-ondersteuningstechnicus worden vastgelegd wanneer deze toegang nodig hebben tot uw server.

RETENTION_DAYS = geheel getal

Van toepassing op: Alleen Azure SQL Managed Instance en Azure SQL Database.

Geeft het aantal dagen aan dat het auditlogboekbestand moet worden opgeslagen.

predicate_expression

Hiermee geeft u de predicaatexpressie op die wordt gebruikt om te bepalen of een gebeurtenis moet worden verwerkt of niet. Predicaatexpressies zijn beperkt tot een lengte van 3000 tekens, waardoor tekenreeksargumenten worden beperkt.

event_field_name

De naam van het gebeurtenisveld dat de predicaatbron identificeert. Auditvelden worden beschreven in sys.fn_get_audit_file. U kunt alle velden filteren, behalve file_name, audit_file_offseten event_time.

Hoewel de velden class_type van het action_id type varchar zijnsys.fn_get_audit_file, kunt u ze alleen gebruiken met getallen als ze een predicaatbron zijn voor filteren. Voer de volgende query uit om de lijst met waarden op te halen die u wilt class_typegebruiken:

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

number

Elk numeriek type, inclusief decimaal. Beperkingen zijn het ontbreken van beschikbaar fysiek geheugen of een getal dat te groot is om te worden weergegeven als een 64-bits geheel getal.

'string'

Een ANSI- of Unicode-tekenreeks zoals vereist voor het predicaat vergelijken. De vergelijkingsfuncties voor predicaat voeren geen impliciete conversie van tekenreekstypen uit. Het doorgeven van het verkeerde type resulteert in een fout.

Remarks

Er wordt een servercontrole gemaakt met een uitgeschakelde status.

De stelling CREATE SERVER AUDIT vormt onderdeel van een transactie. Als u de transactie terugdraait, wordt de instructie ook teruggedraaid.

Permissions

Als u een servercontrole wilt maken, wijzigen of verwijderen, hebben principals de ALTER ANY SERVER AUDIT machtiging of de CONTROL SERVER machtiging nodig.

Wanneer u controlegegevens opslaat in een bestand, beperkt u de toegang tot de bestandslocatie om manipulatie te voorkomen.

Examples

A. Een servercontrole maken met een bestandsdoel

In het volgende voorbeeld wordt een servercontrole gemaakt met de naam HIPAA_Audit met een binair bestand als doel en geen opties.

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

B. Een servercontrole maken met een Windows-toepassingslogboekdoel met opties

In het volgende voorbeeld wordt een servercontrole gemaakt met de naam HIPAA_Audit met de doelset voor het Windows-toepassingslogboek. De wachtrij wordt elke seconde geschreven en de SQL Server-engine wordt afgesloten bij een fout.

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

C. Een servercontrole met een WHERE-component maken

In het volgende voorbeeld wordt een database, schema en twee tabellen voor het voorbeeld gemaakt. De benoemde DataSchema.SensitiveData tabel bevat vertrouwelijke gegevens en toegang tot de tabel moet worden vastgelegd in de audit.

De tabel met de naam DataSchema.GeneralData bevat geen vertrouwelijke gegevens. De databasecontrolespecificatie controleert de toegang tot alle objecten in het DataSchema schema.

De servercontrole wordt gemaakt met een WHERE component waarmee de servercontrole wordt beperkt tot alleen de SensitiveData tabel. Bij de servercontrole wordt ervan uitgegaan dat er een auditmap bestaat op 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

Maak de servercontrole in de 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

Maak de databasecontrolespecificatie in de 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

Activeer de controlegebeurtenis door een selectie uit tabellen te maken:

SELECT ID,
       DataField
FROM DataSchema.GeneralData;

SELECT ID,
       DataField
FROM DataSchema.SensitiveData;
GO

Controleer de controle op de gefilterde inhoud:

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

Transact-SQL referentie