Delen via


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

Syntaxis

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

Argumenten

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.

Belangrijk

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 UNLIMITED dit is opgegeven, 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 kan worden opgegeven, 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. 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 er 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.

VOORTZETTEN

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.

UITSCHAKELEN

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. De GUID kan niet worden gewijzigd nadat de controle is 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.

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. Alle velden kunnen worden gefilterd, behalve file_name, audit_file_offseten event_time.

Opmerking

Hoewel de velden action_id van het class_type type varchar zijnsys.fn_get_audit_file, kunnen ze alleen worden gebruikt met getallen als ze een predicaatbron zijn voor filteren. Voer de volgende query uit om de lijst met waarden op te halen waarmee moet worden gebruikt class_type:

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

nummer

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.

'tekenreeks'

Een ANSI- of Unicode-tekenreeks zoals vereist voor het predicaat vergelijken. Er wordt geen impliciete conversie van tekenreekstypen uitgevoerd voor de functies voor predicaatvergelijking. Het doorgeven van het verkeerde type resulteert in een fout.

Opmerkingen

Wanneer een servercontrole wordt gemaakt, heeft deze de status Uitgeschakeld.

De CREATE SERVER AUDIT instructie valt binnen het bereik van een transactie. Als de transactie wordt teruggedraaid, wordt de verklaring ook teruggedraaid.

Machtigingen

Voor het maken, wijzigen of verwijderen van een servercontrole is de ALTER ANY SERVER AUDIT of de CONTROL SERVER machtiging vereist voor principals.

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

Voorbeelden

Eén. Een servercontrole maken met een bestandsdoel

In het volgende voorbeeld wordt een servercontrole gemaakt die wordt aangeroepen 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 die wordt aangeroepen 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

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

Transact-SQL verwijzing