我在我的數據庫中創建了多個用戶帳戶,這些用戶帳戶由多個用戶使用。現在我想要一種方式,以便我可以記錄所有運行的查詢&由那些特定用戶完成的操作應該被記錄下來。sql server爲特定用戶啓用日誌
是否有可能對某些特定的用戶可以登錄他們的活動?
感謝
我在我的數據庫中創建了多個用戶帳戶,這些用戶帳戶由多個用戶使用。現在我想要一種方式,以便我可以記錄所有運行的查詢&由那些特定用戶完成的操作應該被記錄下來。sql server爲特定用戶啓用日誌
是否有可能對某些特定的用戶可以登錄他們的活動?
感謝
從SQL Server 2008 R2開始,您可以使用Extends Events下管理 - >會話。
您可以爲特定用戶創建一個會話日誌記錄,用於sql_statement_completed事件和過濾器。
對於類似的問題,您可以在MSDN和my previous answer上看到更多信息。
沒有你不能做那即,不能針對特定用戶啓用日誌記錄,剩下的。如果要獲取用戶的特定詳細信息,可以使用SQL Server Management Studio從活動監視器中檢查活動。
你可以嘗試this查詢來獲取查詢:
SELECT cr.DatabaseName
,s.session_id
,s.host_name
,s.program_name
,s.client_interface_name
,s.login_name
,s.login_time
,s.nt_domain
,s.nt_user_name
,c.client_net_address
,c.local_net_address
,cr.ObjName
,cr.Query
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON c.session_id = s.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(c.most_recent_sql_handle)
FOR XML PATH('')
,TYPE
), '') AS Query
FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)
) cr
where s.nt_user_name = '' -- filter here your user name
and s.session_id <> @@SPID
ORDER BY c.session_id
在一個側面說明:
我通常使用此查詢來獲得在過去的時間裏執行的查詢列表
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
好的,有沒有什麼方法或任何查詢,我們可以從中獲取特定用戶執行的查詢列表? –
@HarshitShrivastava: - 你可以嘗試上面的查詢。 –
感謝您的回覆。那麼對於獲取特定用戶在數據庫上完成的工作日誌,您可以提出什麼建議?另外,活動監視器是否需要更多內存,因爲它將在服務器上使用。 –