【发布时间】:2019-04-24 13:06:57
【问题描述】:
我被要求找出谁在 Azure SQL 数据库上创建了某个扩展事件会话。但是,翻阅 DMV,有很多属性,但没有表明它是什么时候创建的,或者是由谁创建的。
有没有办法确定这一点?
谢谢。
【问题讨论】:
标签: azure-sql-database extended-events dmv
我被要求找出谁在 Azure SQL 数据库上创建了某个扩展事件会话。但是,翻阅 DMV,有很多属性,但没有表明它是什么时候创建的,或者是由谁创建的。
有没有办法确定这一点?
谢谢。
【问题讨论】:
标签: azure-sql-database extended-events 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 here 一起使用)。
如果您发现数据量太大而无法查询,您可以随时下载审计文件(.xel 文件,SQL 审计是通过扩展事件实现的)并编写自定义工具来执行此操作(Microsoft 提供了一个库来解析通过 LINQ 扩展事件文件。详情请参阅 here)。
【讨论】: