我在我的数据库中创建了几个用户帐户,供多个用户使用。现在我想要一种方法,以便我可以记录所有运行的查询&应记录这些特定用户所做的操作。
某些特定用户是否可以记录他们的活动?
由于
答案 0 :(得分:1)
否您无法做到这一点,即您无法为特定用户启用日志记录,剩下的就是其他用户。如果要获取用户的特定详细信息,可以使用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
答案 1 :(得分:1)
从SQL Server 2008 R2,您可以使用管理 - &gt;会话下的扩展活动。
您可以为 sql_statement_completed 事件创建会话日志记录,并针对特定用户进行过滤。
您可以在MSDN和my previous answer上查看有关类似问题的更多信息。