Sql-Server

如何在 SQL 中獲取使用使用者名執行的查詢的歷史記錄

  • June 13, 2020

我可以使用以下方法執行查詢:

SELECT deqs.last_execution_time AS [Time]
   ,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

但我也在尋找username執行這些查詢的列。

我建議您創建伺服器端跟踪或啟用 SQL 審計來跟踪您不信任的使用者的活動。

請記住,如果清除了 DMV、重新啟動 SQL Server 等,則會重置 DMV 數據。

您可以獲得的最接近的是使用以下查詢:

/******************************************************
Script : Findout Who did what ?
Author : Kin Shah .. written for dba.stackexchange.com
*******************************************************/
USE master
go
SELECT sdest.DatabaseName 
   ,sdes.session_id
   ,sdes.[host_name]
   ,sdes.[program_name]
   ,sdes.client_interface_name
   ,sdes.login_name
   ,sdes.login_time
   ,sdes.nt_domain
   ,sdes.nt_user_name
   ,sdec.client_net_address
   ,sdec.local_net_address
   ,sdest.ObjName
   ,sdest.Query
FROM sys.dm_exec_sessions AS sdes
INNER JOIN sys.dm_exec_connections AS sdec ON sdec.session_id = sdes.session_id
CROSS APPLY (
   SELECT db_name(dbid) AS DatabaseName
       ,object_id(objectid) AS ObjName
       ,ISNULL((
               SELECT TEXT AS [processing-instruction(definition)]
               FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
               FOR XML PATH('')
                   ,TYPE
               ), '') AS Query

   FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
   ) sdest
where sdes.session_id <> @@SPID 
--and sdes.nt_user_name = '' -- Put the username here !
ORDER BY sdec.session_id

引用自:https://dba.stackexchange.com/questions/135078