我被要求找出谁在 Azure SQL 数据库上创建了某个扩展事件会话。然而,翻阅 DMV,有很多属性,但没有表明它是什么时候创建的,或者是由谁创建的。
有没有办法确定这一点?
谢谢你。
我被要求找出谁在 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
在此处阅读如何使用日期模式)。
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).