Dela via


SKAPA SERVERGRANSKNING (Transact-SQL)

Gäller för:SQL ServerAzure SQL Managed Instance

Skapar ett servergranskningsobjekt med SQL Server-granskning. Mer information finns i SQL Server-granskning (databasmotor).

Transact-SQL syntaxkonventioner

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

Argumentpunkter

TILL { FIL | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }

Avgör platsen för granskningsmålet. Alternativen är en binär fil, Windows-programloggen eller Windows-säkerhetsloggen. SQL Server kan inte skriva till Windows-säkerhetsloggen utan att konfigurera extra inställningar i Windows. Mer information finns i Skriva SQL Server-granskningshändelser till säkerhetsloggen.

Målet URL stöds inte för SQL Server.

Viktigt!

I Azure SQL Managed Instance fungerar SQL Audit på servernivå. Platser kan bara vara URL eller EXTERNAL_MONITOR.

FILEPATH = "os_file_path"

Sökvägen till granskningsloggen. Filnamnet genereras baserat på granskningsnamnet och gransknings-GUID. Om den här sökvägen är ogiltig skapas inte granskningen.

FILEPATH målet stöds inte för Azure SQL Managed Instance. Du måste använda PATH i stället.

MAXSIZE = max_size

Anger den maximala storlek som granskningsfilen kan växa till. Det max_size värdet måste vara ett heltal följt av MB, GB, TB eller UNLIMITED. Den minsta storlek som du kan ange för max_size är 2 MB och maxvärdet är 2 147 483 647 TB. När UNLIMITED har angetts växer filen tills disken är full. (0 anger UNLIMITEDockså .) Om du anger ett värde som är lägre än 2 MB uppstår felet MSG_MAXSIZE_TOO_SMALL. Standardvärdet är UNLIMITED.

MAXSIZE målet stöds inte för Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { heltal | OBEGRÄNSAT }

Anger det maximala antalet filer som ska behållas i filsystemet utöver den aktuella filen. Värdet MAX_ROLLOVER_FILES måste vara ett heltal eller UNLIMITED. Standardvärdet är UNLIMITED. Den här parametern utvärderas när granskningen startas om (vilket kan inträffa när instansen av databasmotorn startas om eller när granskningen är avstängd och sedan på igen) eller när en ny fil behövs eftersom den MAXSIZE har nåtts. När MAX_ROLLOVER_FILES utvärderas tas den äldsta filen bort om antalet filer överskrider MAX_ROLLOVER_FILES inställningen. När inställningen MAX_ROLLOVER_FILES är 0 skapas därför en ny fil varje gång inställningen MAX_ROLLOVER_FILES utvärderas. Endast en fil tas bort automatiskt när MAX_ROLLOVER_FILES inställningen utvärderas, så när värdet MAX_ROLLOVER_FILES för minskas krymper inte antalet filer om inte gamla filer tas bort manuellt. Det maximala antalet filer som kan anges är 2 147 483 647.

MAX_ROLLOVER_FILES stöds inte för Azure SQL Managed Instance.

MAX_FILES = heltal

Anger det maximala antalet granskningsfiler som kan skapas. Överförs inte till den första filen när gränsen har nåtts. När gränsen MAX_FILES har nåtts misslyckas alla åtgärder som gör att fler granskningshändelser genereras med ett fel.

RESERVE_DISK_SPACE = { ON | AV }

Det här alternativet förallokerar filen på disken till värdet MAXSIZE . Det gäller endast om MAXSIZE inte är lika med UNLIMITED. Standardvärdet är OFF.

RESERVE_DISK_SPACE målet stöds inte för Azure SQL Managed Instance.

QUEUE_DELAY = heltal

Avgör den tid i millisekunder som kan förflutit innan granskningsåtgärder tvingas bearbetas. Värdet 0 anger synkron leverans. Det minsta frågefördröjningsvärdet som kan ställas in är 1000 (1 sekund), vilket är standardvärdet. Maxvärdet är 2147483647 (2 147 483,647 sekunder eller 24 dagar, 20 timmar, 31 minuter, 23,647 sekunder). Om du anger ett ogiltigt tal genereras MSG_INVALID_QUEUE_DELAY felet.

ON_FAILURE = { FORTSÄTT | AVSTÄNGNING | FAIL_OPERATION }

Anger om instansen som skriver till målet ska misslyckas, fortsätta eller stoppa SQL Server om målet inte kan skriva till granskningsloggen. Standardvärdet är CONTINUE.

FORTSÄTTA

SQL Server-åtgärderna fortsätter. Granskningsposter behålls inte. Granskningen fortsätter att försöka logga händelser och återupptas om feltillståndet har lösts. Om du väljer alternativet Fortsätt kan du tillåta oreviderad aktivitet, vilket kan bryta mot dina säkerhetsprinciper. Använd det här alternativet när det är viktigare att fortsätta driften av databasmotorn än att upprätthålla en fullständig granskning.

NEDSTÄNGNING

Tvingar instansen av SQL Server att stängas av om SQL Server av någon anledning inte kan skriva data till granskningsmålet. Inloggningen som kör -instruktionen CREATE SERVER AUDIT måste ha behörigheten SHUTDOWN i SQL Server. Avstängningsbeteendet kvarstår även om behörigheten SHUTDOWN senare återkallas från den körande inloggningen. Om användaren inte har den här behörigheten misslyckas instruktionen och granskningen skapas inte. Använd alternativet när ett granskningsfel kan äventyra systemets säkerhet eller integritet. Mer information finns i AVSTÄNGNING.

FAIL_OPERATION

Databasåtgärder misslyckas om de orsakar granskade händelser. Åtgärder som inte orsakar granskade händelser kan fortsätta, men inga granskade händelser kan inträffa. Granskningen fortsätter att försöka logga händelser och återupptas om feltillståndet har lösts. Använd det här alternativet när det är viktigare att underhålla en fullständig granskning än fullständig åtkomst till databasmotorn.

AUDIT_GUID = unik identifierare

För att stödja scenarier som databasspegling eller databaser som deltar i en AlwaysOn-tillgänglighetsgrupp behöver en granskning ett specifikt GUID som matchar GUID som finns i den speglade databasen. GUID:t kan inte ändras när granskningen har skapats.

OPERATOR_AUDIT

Gäller för: Endast Azure SQL Managed Instance.

Anger om granskning samlar in Microsofts supporttekniker när de behöver komma åt servern under en supportbegäran.

predicate_expression

Anger det predikatuttryck som används för att avgöra om en händelse ska bearbetas eller inte. Predikatuttryck är begränsade till en längd på 3 000 tecken, vilket begränsar strängargument.

event_field_name

Namnet på det händelsefält som identifierar predikatkällan. Granskningsfält beskrivs i sys.fn_get_audit_file. Alla fält kan filtreras utom file_name, audit_file_offsetoch event_time.

Anmärkning

Fälten action_id och class_type är av typen varchar i sys.fn_get_audit_file, men de kan bara användas med tal när de är en predikatkälla för filtrering. Kör följande fråga för att hämta listan med värden som ska användas med class_type:

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

nummer

Alla numeriska typer inklusive decimaler. Begränsningar är bristen på tillgängligt fysiskt minne eller ett tal som är för stort för att representeras som ett 64-bitars heltal.

"sträng"

Antingen en ANSI- eller Unicode-sträng enligt vad som krävs av predikatet jämför. Ingen implicit strängtypkonvertering utförs för jämförelsefunktionerna för predikat. Att skicka fel typ resulterar i ett fel.

Anmärkningar

När en servergranskning skapas är den i inaktiverat tillstånd.

-instruktionen CREATE SERVER AUDIT finns i en transaktions omfång. Om transaktionen återställs, återställs även instruktionen.

Behörigheter

För att skapa, ändra eller släppa en servergranskning kräver huvudnamnen ALTER ANY SERVER AUDIT eller behörigheten CONTROL SERVER .

När du sparar granskningsinformation i en fil kan du begränsa åtkomsten till filplatsen för att förhindra manipulering.

Exempel

A. Skapa en servergranskning med ett filmål

I följande exempel skapas en servergranskning med namnet HIPAA_Audit med en binär fil som mål och inga alternativ.

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

B. Skapa en servergranskning med ett Mål för Windows-programloggen med alternativ

I följande exempel skapas en servergranskning med namnet HIPAA_Audit med måluppsättningen för Windows-programloggen. Kön skrivs varje sekund och stänger av SQL Server-motorn vid fel.

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

C. Skapa en servergranskning som innehåller en WHERE-sats

I följande exempel skapas en databas, ett schema och två tabeller för exemplet. Tabellen med namnet DataSchema.SensitiveData innehåller konfidentiella data och åtkomst till tabellen måste registreras i granskningen. Tabellen med namnet DataSchema.GeneralData innehåller inte konfidentiella data. Databasgranskningsspecifikationen granskar åtkomsten DataSchema till alla objekt i schemat. Servergranskningen skapas med en WHERE-sats som begränsar servergranskningen SensitiveData till endast tabellen. Servergranskningen förutsätter att en granskningsmapp finns på 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 referens