Получение имени пользователя, который выполнил хранимую процедуру в базе данных? - PullRequest
0 голосов
/ 07 февраля 2019

Кто-то запустил хранимую процедуру со своего компьютера, и я просто хочу узнать, кто выполнил эту хранимую процедуру.

Я пытаюсь увидеть sys.dm_exec_procedure_stats, но мне не повезло:

SELECT object_id
FROM sys.dm_exec_procedure_stats
WHERE OBJECT_NAME(object_id,database_id) = 'SpName' 

1 Ответ

0 голосов
/ 07 февраля 2019

Я использовал https://dba.stackexchange.com/questions/135078/how-to-get-history-of-queries-executed-with-username-in-sql и обновил свою логику, и это сработало для меня

USE master
go
SELECT top 10 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) WHERE OBJECT_NAME(objectid,dbid)='MySp' 
    ) sdest
where sdes.session_id <> @@SPID  
--and sdes.nt_user_name = '' -- Put the username here !
ORDER BY sdec.session_id
...