як отримати історію запитів, виконаних з ім'ям користувача в SQL


11

Я можу отримати виконані запити, використовуючи:

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колонку, яка виконувала ці запити.


2
Ні, SQL Server не відстежує користувачів, які виконують запити, за винятком деяких DML / DDL, захоплених слідом за замовчуванням.
Аарон Бертран

Відповіді:


27

Я б запропонував вам створити трасування на стороні сервера або включити SQL Audit для відстеження активності користувачів, яким ви не довіряєте.

Пам’ятайте, що дані DMV скидаються, якщо очищення DMV очищено, сервер sql перезапущений тощо.

Найближчий ви можете отримати за допомогою запиту нижче:

/******************************************************
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 спасибі за те, що поділився цим дуже корисним сценарієм. це якось подібне до цього dba.stackexchange.com/questions/135140/…
Marcello Miorelli

1
@marcellomiorelli yeh .. Скрипт можна використовувати для вирішення вашого питання, але я все одно буду шукати сторону сліду сервера або SQLAduit. Таким чином, вам не доведеться турбуватися про вимивання даних із DMV.
Кін Шах

Як фільтрувати за sdest.Query ?
Кікенет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.