1

我被要求找出谁在 Azure SQL 数据库上创建了某个扩展事件会话。然而,翻阅 DMV,有很多属性,但没有表明它是什么时候创建的,或者是由谁创建的。

有没有办法确定这一点?

谢谢你。

4

1 回答 1

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 在此处阅读如何使用日期模式)。

If you find the amount of data too big to query you can always download the audit files (.xel files, SQL Auditing is implemented via Extended Events) and write a custom tool to do that (Microsoft is offering a library to parse Extended Event files via LINQ. See details here).

于 2018-11-27T17:18:32.003 回答