Кто создал этот сеанс расширенных событий?
Меня попросили выяснить, кто создал определенный сеанс расширенных событий в базе данных SQL Azure. Однако, просматривая DMV, можно найти множество атрибутов, но ничего не указывает на то, когда они были созданы или кем.
Есть ли способ определить это?
Спасибо.
2 ответа
В Azure это можно сделать, но необходимо включить аудит SQL на уровне базы данных или сервера. Затем вы должны выполнить следующее, используя sys.fn_get_audit_file
функция:
SET NOCOUNT ON;
SELECT
server_principal_id
, database_principal_id
, target_server_principal_id
, target_database_principal_id
, session_server_principal_name
, server_principal_name
, server_principal_sid
, database_principal_name
, target_server_principal_name
, target_server_principal_sid
, target_database_principal_name
, server_instance_name
, database_name
, schema_name
, object_name
, statement
, additional_information
FROM sys.fn_get_audit_file(
'https://blob_storage_name.blob.core.windows.net/sqldbauditlogs/SERVER_NAME/DATABASE_NAME/SqlDbAuditing_ServerAudit/2018-11-27' -- INSERT date here
, DEFAULT
, DEFAULT
)
WHERE statement LIKE '%CREATE EVENT SESSION%';
Это должно вернуть вам необходимую информацию. Имейте в виду, что аудит SQL может генерировать МНОГО данных, поэтому вам может потребоваться запрашивать файлы аудита за день или даже за час (вы можете прочитать, как шаблоны даты используются с sys.fn_get_audit_file
здесь)
Если вы обнаружите, что объем данных слишком велик для запроса, вы всегда можете загрузить файлы аудита (файлы.xel, аудит SQL реализован с помощью расширенных событий) и написать специальный инструмент для этого (Microsoft предлагает библиотеку для анализа файлов расширенных событий). через LINQ. Подробности здесь).
Добавление комментария здесь на случай, если это поможет любому, кто найдет эту старую статью. Я решил эту проблему, добавив аудит SQL с типом действия аудита, установленным на SERVER_OBJECT_CHANGE_GROUP, например:
CREATE SERVER AUDIT SPECIFICATION [SessionTracking]
FOR SERVER AUDIT [EE_monitor]
ADD (SERVER_OBJECT_CHANGE_GROUP)
WITH (STATE = ON)
GO