วิธีรับประวัติการสืบค้นที่ดำเนินการโดยใช้ชื่อผู้ใช้ใน 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 บางรายการที่ถูกติดตามโดยการติดตามเริ่มต้น
Aaron Bertrand

คำตอบ:


27

ฉันขอแนะนำให้คุณสร้างการติดตามฝั่งเซิร์ฟเวอร์หรือเปิดใช้งานการตรวจสอบ SQL เพื่อติดตามกิจกรรมจากผู้ใช้ที่คุณไม่เชื่อถือ

โปรดจำไว้ว่าข้อมูล 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 ใช่ .. สคริปต์สามารถใช้เพื่อตอบคำถามของคุณ แต่ฉันจะไปติดตามฝั่งเซิร์ฟเวอร์หรือ SQLAduit ด้วยวิธีนี้คุณไม่ต้องกังวลกับข้อมูลที่ถูกลบออกจาก DMVs
Kin Shah

วิธีกรองโดยsdest.Query ?
Kiquenet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.