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


sys.fn_get_audit_file_v2 (Transact-SQL)

Применимо к: База данных SQL Azure

Системная sys.fn_get_audit_file_v2 функция в База данных SQL Azure предназначена для получения данных журнала аудита с повышенной эффективностью по сравнению с его предшественникомsys.fn_get_audit_file. Функция вводит фильтрацию на основе времени на уровне файлов и записей, обеспечивая значительные улучшения производительности, особенно для запросов, предназначенных для определенных диапазонов времени.

Внимание

sys.fn_get_audit_file_v2в настоящее время поддерживается только в База данных SQL Azure.

Возвращает сведения из файла аудита, созданного аудитом сервера в База данных SQL Azure. Дополнительные сведения см. в статье Аудит SQL Server (ядро СУБД).

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

Синтаксис

fn_get_audit_file_v2 ( file_pattern
    , { default | initial_file_name | NULL }
    , { default | audit_record_offset | NULL }
    , { default | start time | NULL }
    , { default | end time | NULL } )

Аргументы

file_pattern

Указывает каталог или путь и имя файла для файла аудита, который предстоит прочитать. file_pattern — nvarchar(260).

Передача пути без шаблона имени файла приводит к ошибке.

Этот аргумент используется для указания URL-адреса BLOB-объектов (включая конечную точку хранилища и контейнер). Хотя он не поддерживает подстановочный знак звездочки, можно использовать префикс имени частичного файла (blob) (вместо полного имени большого двоичного объекта) для сбора нескольких файлов (BLOB-объектов), которые начинаются с этого префикса. Например:

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/ — собирает все файлы аудита (BLOB-объекты) для конкретной базы данных.

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel — собирает определенный файл аудита (BLOB-объект).

initial_file_name

Указывает путь и имя файла для определенного файла в наборе файлов аудита, из которого предстоит начать чтение записей аудита. initial_file_name nvarchar(260).

Аргумент initial_file_name должен содержать допустимые записи или содержать default NULL либо значение.

audit_record_offset

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

Аргумент audit_record_offset должен содержать допустимые записи или содержать default NULL либо значение. audit_record_offset является bigint.

start_time

Время начала фильтрации журналов. Записи до этого времени исключены.

end_time

Время окончания фильтрации журналов. Записи после этого времени исключаются.

Таблица возвращенной информации

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

Имя столбца Тип Описание
event_time datetime2 Дата и время срабатывания действия, доступного для аудита. Не допускает значения NULL.
sequence_number int Отслеживает последовательность записей в одной записи аудита, слишком большой, чтобы уместиться в буфере записи для аудитов. Не допускает значения NULL.
action_id varchar(4) Идентификатор действия. Не допускает значения NULL.
succeeded bit Показывает, было ли успешным действие, запустившее событие. Не допускает значения NULL. Для всех событий, отличных от событий имени входа, при этом формируются только сообщения о том, была ли проверка разрешения выполнена успешно или окончилась неудачей, а не сообщения о самой операции.

1 = успех
0 = сбой
permission_bitmask varbinary(16) В некоторых действиях эта битовая маска — это разрешения, которые были предоставлены, отклонены или отменены.
is_column_permission bit Флаг, обозначающий разрешение уровня столбца. Не допускает значения NULL. Возвращает значение 0 , когда permission_bitmask = 0значение .

1 = true
0 = false
session_id smallint Идентификатор сеанса, в котором произошло событие. Не допускает значения NULL.
server_principal_id int Идентификатор контекста имени входа, в котором выполнено действие. Не допускает значения NULL.
database_principal_id int Идентификатор контекста пользователя базы данных, в котором выполнено действие. Не допускает значения NULL. Возвращается 0 , если это не применяется. Например, операция сервера.
target_server_principal_id int Субъект сервера, на который GRANT//DENYREVOKE выполняется операция. Не допускает значения NULL. Возвращается 0 , если применимо.
target_database_principal_id int Субъект GRANT//DENYREVOKE базы данных выполняет операцию. Не допускает значения NULL. Возвращается 0 , если применимо.
object_id int Идентификатор сущности, в которой произошел аудит, который включает следующие объекты:

— объекты сервера
-Баз данных
— объекты базы данных
— объекты схемы

Не допускает значения NULL. Возвращает, 0 является ли сущность самой серверной или если аудит не выполняется на уровне объекта. Например, проверка подлинности.
class_type varchar(2) Тип доступной для аудита сущности, для которой проводится аудит. Не допускает значения NULL.
session_server_principal_name sysname Участник на уровне сервера для сеанса. Допускает значение NULL. Возвращает удостоверение исходного имени входа, подключенного к экземпляру ядро СУБД, если были явные или неявные параметры контекста.
server_principal_name sysname Текущее имя входа. Допускает значение NULL.
server_principal_sid varbinary Идентификатор безопасности текущего имени входа. Допускает значение NULL.
database_principal_name sysname Текущий пользователь. Допускает значение NULL. Возвращается NULL , если недоступно.
target_server_principal_name sysname Целевое имя входа действия. Допускает значение NULL. Возвращается NULL , если применимо.
target_server_principal_sid varbinary Идентификатор безопасности целевого имени входа. Допускает значение NULL. Возвращается NULL , если применимо.
target_database_principal_name sysname Целевой пользователь действия. Допускает значение NULL. Возвращается NULL , если применимо.
server_instance_name sysname Имя экземпляра сервера, где проводился аудит. Используется стандартный server\instance формат.
database_name sysname Контекст базы данных, в котором выполнялось действие. Допускает значение NULL. Возвращается NULL для аудита, происходящих на уровне сервера.
schema_name sysname Контекст схемы, в котором выполнялось действие. Допускает значение NULL. Возвращает данные NULL аудита, происходящие за пределами схемы.
object_name sysname Имя сущности, в которой произошел аудит, которая включает следующие объекты:

— объекты сервера
-Баз данных
— объекты базы данных
— объекты схемы

Допускает значение NULL. Возвращает, NULL является ли сущность самой серверной или если аудит не выполняется на уровне объекта. Например, проверка подлинности.
statement nvarchar(4000) Инструкция Transact-SQL, если она существует. Допускает значение NULL. Возвращается NULL , если применимо.
additional_information nvarchar(4000) Уникальные сведения, применимые только к одиночному событию, возвращаются в формате XML. Некоторые действия, доступные для аудита, содержат такие сведения.

Один уровень стека T-SQL отображается в формате XML для действий, с которыми связан стек T-SQL. Формат XML: <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>

frame nest_level указывает текущий уровень вложения кадра. Имя модуля представлено в трех частях (database_nameиschema_nameobject_name). Имя модуля анализируется для обхода недопустимых XML-символов, таких как <, >, /. _x Они сбежали как _xHHHH_. Он HHHH обозначает шестнадцатеричный шестнадцатеричный код UCS-2 для символа. Допускает значение NULL. Возвращает, NULL если в событии нет дополнительных сведений.
file_name varchar(260) Путь и имя файла журнала аудита, из которого получена запись. Не допускает значения NULL.
audit_file_offset bigint Смещение буфера в файле, который содержит запись аудита. Не допускает значения NULL.

Область применения: только SQL Server
user_defined_event_id smallint Определяемый пользователем идентификатор события, переданный в качестве аргумента sp_audit_write. NULL для системных событий (по умолчанию) и ненулевых для определяемого пользователем события. Дополнительные сведения см. в разделе sp_audit_write (Transact-SQL).

Область применения: SQL Server 2012 (11.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL
user_defined_information nvarchar(4000) Используется для записи дополнительных сведений, которые пользователь хочет записать в журнал аудита с помощью хранимой sp_audit_write процедуры.

Область применения: SQL Server 2012 (11.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL
audit_schema_version int Всегда1.
sequence_group_id varbinary Уникальный идентификатор.

Область применения: SQL Server 2016 (13.x) и более поздних версий
transaction_id bigint Уникальный идентификатор для идентификации нескольких событий аудита в одной транзакции.

Область применения: SQL Server 2016 (13.x) и более поздних версий
client_ip nvarchar(128) Исходный IP-адрес клиентского приложения.

Область применения: SQL Server 2017 (14.x) и более поздних версий и База данных SQL Azure
application_name nvarchar(128) Имя клиентского приложения, которое выполнило инструкцию, которая вызвала событие аудита.

Область применения: SQL Server 2017 (14.x) и более поздних версий и База данных SQL Azure
duration_milliseconds bigint Длительность выполнения запроса в миллисекундах.

Применимо к: База данных SQL Azure и Управляемый экземпляр SQL
response_rows bigint Число строк, возвращаемых в результирующем наборе.

Применимо к: База данных SQL Azure и Управляемый экземпляр SQL
affected_rows bigint Количество строк, затронутых выполненной инструкцией.

Применимо только к: База данных SQL Azure только
connection_id uniqueidentifier Идентификатор подключения на сервере.

Применимо к: База данных SQL Azure и Управляемый экземпляр SQL
data_sensitivity_information nvarchar(4000) Типы сведений и метки конфиденциальности, возвращаемые запросом аудита на основе классифицированных столбцов в базе данных. Дополнительные сведения об обнаружении и классификации данных База данных SQL Azure.

Применимо только к: База данных SQL Azure только
host_name nvarchar(128) Имя узла клиентского компьютера.
session_context nvarchar(4000) Пары "ключ-значение", которые являются частью текущего контекста сеанса.
client_tls_version bigint Минимальная версия TLS, поддерживаемая клиентом.
client_tls_version_name nvarchar(128) Минимальная версия TLS, поддерживаемая клиентом.
database_transaction_id bigint Идентификатор транзакции текущей транзакции в текущем сеансе.
ledger_start_sequence_number bigint Порядковый номер операции в транзакции, при выполнении которой была создана версия строки.

Применимо только к: База данных SQL Azure только
external_policy_permissions_checked nvarchar(4000) Сведения, связанные с проверкой разрешений внешней авторизации, при создании события аудита и оценке политик внешней авторизации Purview.

Применимо только к: База данных SQL Azure только
obo_middle_tier_app_id varchar(120) Идентификатор приложения среднего уровня, подключающегося к База данных SQL Azure с помощью доступа от имени (OBO). Допускает значение NULL. Возвращает, NULL если запрос не выполняется с помощью доступа OBO.

Применимо только к: База данных SQL Azure только
is_local_secondary_replica bit True Значение , если запись аудита возникает из локальной вторичной реплики только для чтения, False в противном случае.

Применимо только к: База данных SQL Azure только

Улучшения по сравнению с sys.fn_get_audit_file

Функция sys.fn_get_audit_file_v2 обеспечивает существенное улучшение более старых sys.fn_get_audit_file путем внедрения эффективной фильтрации на основе времени как на уровне файлов, так и записей. Эта оптимизация особенно полезна для запросов, предназначенных для небольших диапазонов времени и может помочь обеспечить производительность в средах с несколькими базами данных.

Фильтрация на двух уровнях

Фильтрация на уровне файла: функция сначала фильтрует файлы на основе указанного диапазона времени, уменьшая количество файлов, которые необходимо сканировать.

Фильтрация на уровне записей. Затем применяется фильтрация в выбранных файлах для извлечения только соответствующих записей.

Улучшения в плане производительности

Улучшения производительности в основном зависят от времени отката файлов BLOB-объектов и диапазона времени запроса. Предположим, что однородное распределение записей аудита:

  • Снижение нагрузки: свести к минимуму количество файлов и записей для сканирования, это снижает нагрузку на систему и улучшает время отклика запроса.

  • Масштабируемость: помогает поддерживать производительность даже при увеличении числа баз данных, хотя чистое улучшение может быть менее заметным в средах с большим количеством баз данных.

Сведения о настройке аудита База данных SQL Azure см. в статье "Начало работы с База данных SQL аудите".

Замечания

  • Если аргумент file_pattern, переданный для fn_get_audit_file_v2 ссылок на путь или файл, который не существует, или если файл не является файлом аудита, MSG_INVALID_AUDIT_FILE возвращается сообщение об ошибке.

  • fn_get_audit_file_v2нельзя использовать при создании аудита с параметрами или EXTERNAL_MONITOR параметрами.APPLICATION_LOGSECURITY_LOG

Разрешения

Требуется разрешение CONTROL DATABASE.

  • Администраторы сервера могут получить доступ к журналам аудита всех баз данных на сервере.

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

  • Большие двоичные объекты, которые не соответствуют приведенным выше критериям, пропускаются (список пропущенных больших двоичных объектов отображается в выходном сообщении запроса). Функция возвращает журналы только из больших двоичных объектов, для которых разрешен доступ.

Примеры

В этом примере извлекаются журналы аудита из определенного расположения Хранилище BLOB-объектов Azure, фильтрация записей между 2023-11-17T08:40:40Z и2023-11-17T09:10:40Z.

SELECT *
FROM sys. fn_get_audit_file_v2(
    'https://yourstorageaccount.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
    DEFAULT,
    DEFAULT,
    '2023-11-17T08:40:40Z',
    '2023-11-17T09:10:40Z')

Дополнительные сведения

Представления системного каталога:

Transact-SQL: