SQL kullanıcı adıyla yürütülen sorguların geçmişi nasıl edinilir


11

Ben kullanarak sorguları alabilirsiniz:

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

ama ben de usernamebu sorguları yürüten sütun arıyorum .


2
Hayır, SQL Server, varsayılan izlemenin yakaladığı bazı DML / DDL'ler dışında sorgu yürüten kullanıcıları izlemez.
Aaron Bertrand

Yanıtlar:


28

Bir sunucu tarafı izlemesi oluşturmanızı veya güvenmediğiniz kullanıcılardan gelen etkinlikleri izlemek için SQL Denetimini etkinleştirmenizi öneririm.

DMV temizlenirse, sql sunucusu yeniden başlatılırsa vb. DMV verilerinin sıfırlanacağını unutmayın.

Alabileceğiniz en yakın sorgu aşağıdaki sorgu kullanarak:

/******************************************************
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

@kin +1 bu çok yararlı betiği paylaştığınız için teşekkürler. bir şekilde buna benziyor dba.stackexchange.com/questions/135140/…
Marcello Miorelli

1
@marcellomiorelli yeh .. script sorunuzu ele almak için kullanılabilir, ancak yine de bir sunucu tarafı izleme veya SQLAduit için gitmek istiyorum. Bu şekilde, verilerin DMV'lerden temizlenmesinden endişe etmenize gerek kalmaz.
Kin Shah

Nasıl filtre tarafından sdest.Query ?
Kiquenet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.