谁创建了这个扩展事件会话?

Who created this Extended Events session?

有人要求我找出谁在 Azure SQL 数据库上创建了某个扩展事件会话。但是,查看 DMV,有很多属性,但没有说明它是何时创建的,由谁创建的。

有办法确定吗?

谢谢。

在 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 [=13 如何使用日期模式=]).

如果您发现数据量太大而无法查询,您可以随时下载审计文件(.xel 文件,SQL审计是通过扩展事件实现的)并编写自定义工具来执行此操作(Microsoft正在提供一个库来通过 LINQ 解析扩展事件文件。查看详细信息 here)。