如何关联SQL Server查询以获取最近100条执行语句的执行用户信息
最终关联查询语句
你可以直接使用下面的语句获取最近100条执行记录,包含执行时间、查询内容、执行用户名:
SELECT TOP 100 deqs.last_execution_time AS [执行时间], dest.text AS [查询语句], sl.name AS [执行用户] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest -- 关联获取计划属性中的用户SID CROSS APPLY sys.dm_exec_plan_attributes(deqs.plan_handle) AS pa -- 关联SQL登录名表匹配用户名 LEFT JOIN sys.sql_logins AS sl ON pa.value = sl.sid WHERE pa.attribute = 'suser_sid' ORDER BY deqs.last_execution_time DESC
关联逻辑说明
- 原
sys.dm_exec_query_stats视图仅存储查询执行的统计信息,本身不直接存储执行用户名,需要通过sys.dm_exec_plan_attributes获取对应缓存计划的创建用户安全标识符(SID) sys.dm_exec_plan_attributes中attribute字段值为suser_sid的记录对应的value字段就是执行用户的SID- 用这个SID和
sys.sql_logins的sid字段做关联,即可匹配到对应的SQL登录用户名
注意:本查询依赖SQL Server的执行计划缓存,如果查询执行后对应计划已经被缓存淘汰,就不会出现在结果中。如果需要查询Windows身份验证的用户信息,可以将关联的
sys.sql_logins替换为sys.server_principals,覆盖所有类型的服务器主体。
内容的提问来源于stack exchange,提问作者Antonio Ruud Goolit
相关产品推荐
相关产品推荐

