Udostępnij za pomocą


UTWÓRZ AUDYT SERWERA (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Tworzy obiekt inspekcji serwera przy użyciu inspekcji programu SQL Server. Aby uzyskać więcej informacji, zobacz Inspekcja programu SQL Server (aparat bazy danych).

Transact-SQL konwencje składni

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

Arguments

audit_name

Nazwa inspekcji. Nie można zawierać spacji w programie SQL Server 2019 (15.x) i starszych wersjach.

DO { FILE | APPLICATION_LOG | SECURITY_LOG | Adres URL | EXTERNAL_MONITOR }

Określa lokalizację obiektu docelowego inspekcji. Opcje to plik binarny, dziennik aplikacji systemu Windows lub dziennik zabezpieczeń systemu Windows. Program SQL Server nie może zapisywać w dzienniku zabezpieczeń systemu Windows bez konfigurowania dodatkowych ustawień w systemie Windows. Aby uzyskać więcej informacji, zobacz Zapisywanie zdarzeń inspekcji programu SQL Server w dzienniku zabezpieczeń.

Obiekt URL docelowy nie jest obsługiwany dla programu SQL Server.

Important

W usłudze Azure SQL Managed Instance inspekcja SQL działa na poziomie serwera. Lokalizacje mogą być URL tylko lub EXTERNAL_MONITOR.

ŚCIEŻKA PLIKU = 'os_file_path'

Ścieżka dziennika inspekcji. Nazwa pliku jest generowana na podstawie nazwy inspekcji i identyfikatora GUID inspekcji. Jeśli ta ścieżka jest nieprawidłowa, inspekcja nie zostanie utworzona.

FILEPATH Element docelowy nie jest obsługiwany w przypadku usługi Azure SQL Managed Instance. Zamiast tego należy użyć PATH polecenia .

MAXSIZE = max_size

Określa maksymalny rozmiar, do którego plik inspekcji może rosnąć. Wartość max_size musi być liczbą całkowitą, po której następuje MB, GB, TB lub UNLIMITED. Minimalny rozmiar, który można określić dla max_size to 2 MB, a maksymalna to 2147 483 647 TB. Po UNLIMITED określeniu plik rośnie do momentu zapełnieniu dysku. (0 wskazuje UNLIMITEDrównież .) Określenie wartości niższej niż 2 MB powoduje wyświetlenie błędu MSG_MAXSIZE_TOO_SMALL. Wartość domyślna to UNLIMITED.

MAXSIZE Element docelowy nie jest obsługiwany w przypadku usługi Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { liczba całkowita | NIEOGRANICZONE }

Określa maksymalną liczbę plików do zachowania w systemie plików oprócz bieżącego pliku. Wartość MAX_ROLLOVER_FILES musi być liczbą całkowitą lub UNLIMITED. Wartość domyślna to UNLIMITED. Ten parametr jest oceniany przy każdym ponownym uruchomieniu inspekcji (co może wystąpić, gdy wystąpienie aparatu bazy danych zostanie uruchomione ponownie lub gdy inspekcja zostanie wyłączona, a następnie ponownie) lub gdy jest potrzebny nowy plik, ponieważ MAXSIZE zostanie osiągnięty. Po MAX_ROLLOVER_FILES ocenie, jeśli liczba plików przekracza MAX_ROLLOVER_FILES ustawienie, najstarszy plik zostanie usunięty. W rezultacie, gdy ustawienie MAX_ROLLOVER_FILES wartości ma wartość 0, zostanie utworzony nowy plik za każdym razem, MAX_ROLLOVER_FILES gdy ustawienie zostanie ocenione. Tylko jeden plik jest automatycznie usuwany podczas MAX_ROLLOVER_FILES oceny ustawienia, więc gdy wartość MAX_ROLLOVER_FILES jest zmniejszona, liczba plików nie zmniejsza się, chyba że stare pliki zostaną ręcznie usunięte. Maksymalna liczba plików, które można określić, to 2 147 483 647.

MAX_ROLLOVER_FILES nie jest obsługiwana w przypadku usługi Azure SQL Managed Instance.

MAX_FILES = liczba całkowita

Określa maksymalną liczbę plików inspekcji, które można utworzyć. Po osiągnięciu limitu nie jest przerzucany do pierwszego pliku. Po osiągnięciu limitu każda MAX_FILES akcja, która powoduje wygenerowanie większej liczby zdarzeń inspekcji, kończy się niepowodzeniem z powodu błędu.

RESERVE_DISK_SPACE = { ON | WYŁ. }

Ta opcja wstępnie przydziela plik na dysku do MAXSIZE wartości. Ma zastosowanie tylko wtedy, gdy MAXSIZE nie jest równe UNLIMITED. Wartość domyślna to OFF.

RESERVE_DISK_SPACE Element docelowy nie jest obsługiwany w przypadku usługi Azure SQL Managed Instance.

QUEUE_DELAY = liczba całkowita

Określa czas (w milisekundach), który może upłynąć przed wymuszeniem przetworzenia akcji inspekcji. Wartość 0 wskazuje synchroniczne dostarczanie. Minimalna ustawiona wartość opóźnienia zapytania to 1000 (1 sekunda), która jest wartością domyślną. Maksymalna wartość to 2147483647 (2147 483,647 sekund lub 24 dni, 20 godzin, 31 minut, 23,647 sekund). Określenie nieprawidłowej liczby powoduje wystąpienie błędu MSG_INVALID_QUEUE_DELAY .

ON_FAILURE = { KONTYNUUJ | ZAMKNIĘCIE | FAIL_OPERATION }

Wskazuje, czy wystąpienie zapisu w obiekcie docelowym powinno zakończyć się niepowodzeniem, kontynuować lub zatrzymać program SQL Server, jeśli obiekt docelowy nie może zapisać w dzienniku inspekcji. Wartość domyślna to CONTINUE.

CONTINUE

Operacje programu SQL Server są kontynuowane. Rekordy inspekcji nie są zachowywane. Inspekcja nadal próbuje rejestrować zdarzenia i wznawiać, jeśli warunek niepowodzenia zostanie rozwiązany. Wybranie opcji Kontynuuj może zezwalać na niezaudiowane działanie, co może naruszać zasady zabezpieczeń. Użyj tej opcji, jeśli ciągła operacja aparatu bazy danych jest ważniejsza niż utrzymywanie pełnej inspekcji.

SHUTDOWN

Wymusza zamknięcie wystąpienia programu SQL Server, jeśli program SQL Server nie może zapisywać danych w obiekcie docelowym inspekcji z jakiegokolwiek powodu. Identyfikator logowania wykonujący instrukcję CREATE SERVER AUDITSHUTDOWN musi mieć uprawnienie w programie SQL Server. Zachowanie zamykania będzie się powtarzać, nawet jeśli SHUTDOWN uprawnienie zostanie później odwołane z wykonania logowania. Jeśli użytkownik nie ma tego uprawnienia, instrukcja zakończy się niepowodzeniem i inspekcja nie zostanie utworzona. Użyj opcji , gdy awaria inspekcji może naruszyć bezpieczeństwo lub integralność systemu. Aby uzyskać więcej informacji, zobacz SHUTDOWN (ZAMYKANIE).

FAIL_OPERATION

Akcje bazy danych kończą się niepowodzeniem, jeśli powodują zdarzenia inspekcji. Akcje, które nie powodują kontynuowania zdarzeń inspekcji, ale nie mogą wystąpić żadne zdarzenia inspekcji. Inspekcja nadal próbuje rejestrować zdarzenia i wznawiać, jeśli warunek niepowodzenia zostanie rozwiązany. Użyj tej opcji, gdy utrzymywanie pełnej inspekcji jest ważniejsze niż pełny dostęp do aparatu bazy danych.

AUDIT_GUID = unikatowy identyfikator

Aby obsługiwać scenariusze, takie jak dublowanie bazy danych lub bazy danych biorące udział w zawsze włączonej grupie dostępności, inspekcja wymaga określonego identyfikatora GUID zgodnego z identyfikatorem GUID znajdującym się w dublowanej bazie danych. Nie można zmodyfikować identyfikatora GUID po utworzeniu inspekcji.

OPERATOR_AUDIT

Dotyczy: Tylko usługa Azure SQL Managed Instance.

Wskazuje, czy inspekcja przechwytuje operacje inżynierów pomocy technicznej firmy Microsoft, gdy muszą uzyskać dostęp do serwera podczas żądania pomocy technicznej.

predicate_expression

Określa wyrażenie predykatu używane do określania, czy zdarzenie powinno być przetwarzane, czy nie. Wyrażenia predykatu są ograniczone do długości 3000 znaków, co ogranicza argumenty ciągu.

event_field_name

Nazwa pola zdarzenia identyfikującego źródło predykatu. Pola inspekcji są opisane w sys.fn_get_audit_file. Wszystkie pola można filtrować z wyjątkiem file_name, audit_file_offseti event_time.

Note

action_id Chociaż pola i class_type są typu varchar w sys.fn_get_audit_filesystemie , mogą być używane tylko z liczbami, gdy są źródłem predykatu do filtrowania. Aby uzyskać listę wartości, które mają być używane z class_typeprogramem , wykonaj następujące zapytanie:

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

number

Dowolny typ liczbowy, w tym liczba dziesiętna. Ograniczenia to brak dostępnej pamięci fizycznej lub liczba, która jest zbyt duża, aby być reprezentowana jako 64-bitowa liczba całkowita.

'string'

Ciąg ANSI lub Unicode zgodnie z wymaganiami porównania predykatu. Dla funkcji porównywania predykatu nie jest wykonywana niejawna konwersja typu ciągu. Przekazanie nieprawidłowego typu powoduje wystąpienie błędu.

Remarks

Po utworzeniu inspekcji serwera jest ona w stanie wyłączonym.

Instrukcja CREATE SERVER AUDIT znajduje się w zakresie transakcji. Jeśli transakcja zostanie wycofana, instrukcja zostanie również wycofana.

Permissions

Aby utworzyć, zmienić lub usunąć inspekcję serwera, podmioty zabezpieczeń wymagają ALTER ANY SERVER AUDIT uprawnień lub CONTROL SERVER .

Podczas zapisywania informacji inspekcji w pliku, aby zapobiec manipulacji, ogranicz dostęp do lokalizacji pliku.

Examples

A. Tworzenie inspekcji serwera z obiektem docelowym pliku

Poniższy przykład tworzy inspekcję serwera o nazwie HIPAA_Audit z plikiem binarnym jako elementem docelowym i bez opcji.

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

B. Tworzenie inspekcji serwera za pomocą obiektu docelowego dziennika aplikacji systemu Windows z opcjami

Poniższy przykład tworzy inspekcję serwera o nazwie HIPAA_Audit z zestawem docelowym dla dziennika aplikacji systemu Windows. Kolejka jest zapisywana co sekundę i zamyka aparat programu SQL Server po awarii.

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

C. Tworzenie inspekcji serwera zawierającej klauzulę WHERE

W poniższym przykładzie utworzono bazę danych, schemat i dwie tabele. Tabela o nazwie DataSchema.SensitiveData zawiera poufne dane i dostęp do tabeli musi być rejestrowany w inspekcji. Tabela o nazwie DataSchema.GeneralData nie zawiera poufnych danych. Specyfikacja inspekcji bazy danych przeprowadza inspekcję dostępu do wszystkich obiektów w schemacie DataSchema . Inspekcja serwera jest tworzona z klauzulą WHERE, która ogranicza inspekcję SensitiveData serwera tylko do tabeli. Inspekcja serwera zakłada, że folder inspekcji istnieje pod adresem 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 reference