Поделиться через


CREATE SERVER AUDIT (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Создает объект аудита сервера с помощью компонента аудита SQL Server. Дополнительные сведения см. в статье Аудит SQL Server (ядро СУБД).

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

TO { FILE | APPLICATION_LOG | SECURITY_LOG | URL-адрес | EXTERNAL_MONITOR }

Определяет расположение целевого объекта аудита. Возможными параметрами являются двоичный файл, журнал приложений Windows или журнал безопасности Windows. SQL Server не может записывать данные в журнал Безопасность Windows без настройки дополнительных параметров в Windows. Дополнительные сведения см. в разделе "Запись событий аудита SQL Server" в журнал безопасности.

Целевой URL объект не поддерживается для SQL Server.

Внимание

В Управляемом экземпляре SQL Azure компонент аудита SQL выполняется на уровне сервера. Возможны только расположения URL или EXTERNAL_MONITOR.

FILEPATH = "os_file_path"

Путь к журналу аудита. Имя файла формируется на основе имени аудита и его идентификатора GUID. Если этот путь недопустим, аудит не создается.

FILEPATHЦелевой объект не поддерживается для Управляемый экземпляр SQL Azure. Вместо этого необходимо использовать PATH .

MAXSIZE = max_size

Задает максимальный размер, до которого может увеличиваться файл аудита. Значение max_size должно быть целым числом, за которым следует МБ, ГБ, ТБ или UNLIMITED. Минимальный размер для max_size составляет 2 МБ, а максимальный — 2 147 483 647 ТБ. При UNLIMITED указании файл растет до тех пор, пока диск не будет заполнен. (0 также указывает UNLIMITED.) При указании значения меньше 2 МБ возникает ошибка MSG_MAXSIZE_TOO_SMALL. Значение по умолчанию — UNLIMITED.

MAXSIZEЦелевой объект не поддерживается для Управляемый экземпляр SQL Azure.

MAX_ROLLOVER_FILES = { целое число | НЕОГРАНИЧЕННЫЙ }

Указывает максимальное количество файлов, хранимых в файловой системе помимо текущего. Значение MAX_ROLLOVER_FILES должно быть целым числом или UNLIMITED. Значение по умолчанию — UNLIMITED. Этот параметр вычисляется всякий раз, когда аудит перезапускается (что может произойти, когда экземпляр ядро СУБД перезапускается или когда аудит отключен, а затем снова) или когда новый файл необходим, так как MAXSIZE он достигнут. При MAX_ROLLOVER_FILES оценке, если число файлов превышает MAX_ROLLOVER_FILES значение параметра, удаляется самый старый файл. В результате при MAX_ROLLOVER_FILES каждом вычислении параметра 0 создается MAX_ROLLOVER_FILES новый файл. Только один файл автоматически удаляется при MAX_ROLLOVER_FILES вычислении параметра, поэтому при уменьшении значения MAX_ROLLOVER_FILES файлов число файлов не уменьшается, если старые файлы не удаляются вручную. Максимальное число файлов, которое можно указать, составляет 2 147 483 647.

MAX_ROLLOVER_FILESне поддерживается для Управляемый экземпляр SQL Azure.

MAX_FILES = целое число

Область применения: SQL Server 2012 (11.x) и более поздних версий.

Задает максимальное число файлов аудита, которые могут быть созданы. Не выполняет откат к первому файлу при достижении предела. MAX_FILES Когда ограничение достигнуто, любое действие, вызывающее создание дополнительных событий аудита, завершается ошибкой.

RESERVE_DISK_SPACE = { ON | OFF }

Этот параметр предварительно выделяет файл на диске MAXSIZE в значение. Оно применяется только в том случае, если MAXSIZE оно не равно UNLIMITED. Значение по умолчанию — OFF.

RESERVE_DISK_SPACEЦелевой объект не поддерживается для Управляемый экземпляр SQL Azure.

QUEUE_DELAY = целое число

Определяет задержку в миллисекундах, после которой продолжается выполнение действий аудита. Значение 0 соответствует синхронной доставке. Минимальное значение задержки запроса с набором — 1000 (1 секунда), которое является значением по умолчанию. Максимальное значение — 2147483647 2 147 483,647 секунд или 24 дня, 20 часов, 31 минуты, 23,647 секунды. Указание недопустимого числа вызывает ошибку MSG_INVALID_QUEUE_DELAY .

ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }

Указывает, должен ли экземпляр записывать в целевой объект ошибку, продолжить или остановить SQL Server, если целевой объект не может записать в журнал аудита. Значение по умолчанию — CONTINUE.

Продолжить

Операции SQL Server продолжаются. Записи аудита не сохраняются. Аудит продолжает попытки регистрации событий и возобновляется после устранения причины сбоя. Выбор варианта "Продолжить" разрешает непроверенные действия, которые могут нарушать политики безопасности. Используйте этот параметр, если продолжить работу ядро СУБД важнее, чем обслуживание полного аудита.

SHUTDOWN

Принудительно завершает работу экземпляра SQL Server, если SQL Server не может записывать данные в целевой объект аудита по какой-либо причине. Имя входа, выполняющее инструкцию CREATE SERVER AUDIT , должно иметь SHUTDOWN разрешение в SQL Server. Поведение завершения работы сохраняется даже в том случае, если имя входа, выполняющее инструкцию, позднее отменяет разрешение SHUTDOWN. Если у пользователя нет этого разрешения, инструкция завершается ошибкой и аудит не создается. Используйте этот параметр, когда сбой аудита может нанести ущерб безопасности или целостности системы. Дополнительные сведения см. в разделе SHUTDOWN.

FAIL_OPERATION

Область применения: SQL Server 2012 (11.x) и более поздних версий.

Действия с базой данных завершаются ошибкой, если они вызывают события аудита. Действия, которые не приводят к продолжению аудита событий, но аудит событий не может произойти. Аудит продолжает попытки регистрации событий и возобновляется после устранения причины сбоя. Используйте этот параметр при сохранении полного аудита, чем полный доступ к ядро СУБД.

AUDIT_GUID = uniqueidentifier

Чтобы поддерживать такие сценарии, как зеркальное отображение базы данных, аудиту необходим конкретный идентификатор GUID, который совпадает с идентификатором GUID, найденным в зеркальной базе данных. Guid нельзя изменить после создания аудита.

OPERATOR_AUDIT

Применяется только к: Управляемый экземпляр SQL Azure.

Указывает, фиксирует ли аудит операции инженеров поддержки Майкрософт, когда им нужно получить доступ к серверу во время запроса на поддержку.

predicate_expression

Применимо: SQL Server 2012 (11.x) и более поздних версий.

Задает выражение предиката, используемое для определения необходимости обработки события. Выражения предиката ограничены 3000 символами, ограничивающими строковые аргументы.

event_field_name

Применимо: SQL Server 2012 (11.x) и более поздних версий.

Имя поля события, определяющего источник предиката. Поля аудита описаны в разделе sys.fn_get_audit_file (Transact-SQL). Фильтровать можно все поля, за исключением file_name, audit_file_offset и event_time.

Примечание.

action_id Хотя поля имеют class_type тип varchar, sys.fn_get_audit_fileих можно использовать только с числами, если они являются источником предиката для фильтрации. Чтобы получить список значений для использования с class_type, выполните следующий запрос:

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

number

Применимо: SQL Server 2012 (11.x) и более поздних версий.

Любой числовой тип, включая десятичный. Ограничения: недостаток доступной физической памяти или слишком большое число, которое невозможно представить 64-разрядным целым.

'string'

Применимо: SQL Server 2012 (11.x) и более поздних версий.

Для предикатного сравнения требуется строка в Юникоде или ANSI. Для функций предикатного сравнения не выполняется неявное преобразование строкового типа. Передача неверного типа приводит к ошибке.

Замечания

При создании аудита сервера он находится в отключенном состоянии.

Оператор CREATE SERVER AUDIT находится в области транзакции. Если выполняется откат транзакции, происходит также откат этой инструкции.

Разрешения

Чтобы создать, изменить или удалить аудит сервера, субъекты требуют ALTER ANY SERVER AUDIT разрешения или CONTROL SERVER разрешения.

При сохранении сведений аудита в файл, чтобы предотвратить изменение, ограничьте доступ к расположению файла.

Примеры

А. Создание аудита сервера с целевым объектом файла

В следующем примере создается аудит сервера с именем HIPAA_Audit, не имеющий параметров, для которого целевым является двоичный файл.

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

B. Создание аудита сервера с целевым объектом журнала приложений Windows с параметрами

В следующем примере создается аудит сервера с именем HIPAA_Audit и журналом приложений Windows в качестве цели. Очередь записывается каждую секунду и завершает работу подсистемы SQL Server при сбое.

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

В. Создание аудита сервера, содержащего предложение WHERE

В следующем примере создается база данных, схема и две таблицы. Таблица с именем DataSchema.SensitiveData содержит конфиденциальные данные, и доступ к ней должен регистрироваться в аудите. Таблица с именем DataSchema.GeneralData не содержит конфиденциальных данных. Спецификация аудита базы данных осуществляет аудит доступа ко всем объектам в схеме DataSchema. Аудит сервера создается с предложением WHERE, которое ограничивает аудит сервера таблицей SensitiveData. Аудит сервера предполагает наличие папки аудита в 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