Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查找上次在SQL server中修改表的用户?_Sql_Sql Server - Fatal编程技术网

如何查找上次在SQL server中修改表的用户?

如何查找上次在SQL server中修改表的用户?,sql,sql-server,Sql,Sql Server,我正在尝试查找上次在SQL Server中修改特定表的用户。 sys.dm_db_index_usage_stats提供了关于表的上次修改日期的信息,但我正在查找上次修改日期。有没有办法确定上次修改的特定表是哪个登录名?我认为您必须在SQL Server中启用默认情况下未启用的内置审核,或者编写自己的审核方法 如果这是为了已经发生的事情,那么我认为您可能运气不好。我认为您必须在SQL Server中启用默认情况下未启用的内置审核,或者,编写自己的审核方法 如果这是为了已经发生的事情,那么我想你可

我正在尝试查找上次在SQL Server中修改特定表的用户。
sys.dm_db_index_usage_stats提供了关于表的上次修改日期的信息,但我正在查找上次修改日期。有没有办法确定上次修改的特定表是哪个登录名?

我认为您必须在SQL Server中启用默认情况下未启用的内置审核,或者编写自己的审核方法


如果这是为了已经发生的事情,那么我认为您可能运气不好。

我认为您必须在SQL Server中启用默认情况下未启用的内置审核,或者,编写自己的审核方法


如果这是为了已经发生的事情,那么我想你可能运气不好。

试试这个,看看是否有帮助:

DECLARE @filename VARCHAR(255) 
SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'  
FROM sys.traces   
WHERE is_default = 1;  

SELECT gt.HostName, 
       gt.ApplicationName, 
       gt.NTUserName, 
       gt.NTDomainName, 
       gt.LoginName, 
       gt.SPID, 
       gt.EventClass, 
       te.Name AS EventName,
       gt.EventSubClass,      
       gt.TEXTData, 
       gt.StartTime, 
       gt.EndTime, 
       gt.ObjectName, 
       gt.DatabaseName, 
       gt.FileName, 
       gt.IsSystem
FROM [fn_trace_gettable](@filename, DEFAULT) gt 
JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 
WHERE EventClass in (164) 
ORDER BY StartTime DESC; 

试试这个,看看是否有帮助:

DECLARE @filename VARCHAR(255) 
SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'  
FROM sys.traces   
WHERE is_default = 1;  

SELECT gt.HostName, 
       gt.ApplicationName, 
       gt.NTUserName, 
       gt.NTDomainName, 
       gt.LoginName, 
       gt.SPID, 
       gt.EventClass, 
       te.Name AS EventName,
       gt.EventSubClass,      
       gt.TEXTData, 
       gt.StartTime, 
       gt.EndTime, 
       gt.ObjectName, 
       gt.DatabaseName, 
       gt.FileName, 
       gt.IsSystem
FROM [fn_trace_gettable](@filename, DEFAULT) gt 
JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 
WHERE EventClass in (164) 
ORDER BY StartTime DESC; 

感谢大家研究我的问题并提供建议。我在触发器中使用了下面的脚本来获得最后修改的

   DECLARE @login_name NVARCHAR(200)
   SELECT  @login_name = loginame
   FROM  sys.sysprocesses
   WHERE   spid = @@SPID

感谢大家研究我的问题并提供建议。我在触发器中使用了下面的脚本来获得最后修改的

   DECLARE @login_name NVARCHAR(200)
   SELECT  @login_name = loginame
   FROM  sys.sysprocesses
   WHERE   spid = @@SPID

用户是直接修改表还是通过存储过程修改表?我正在尝试在表上创建一个insert、update和delete触发器,这样,如果有人试图执行DML操作,它应该在日志表中插入诸如MODIFED_date、MODIFED_by、row_id等信息。在这种情况下,我想您可以像本文建议的那样做:表是由用户直接修改还是通过存储过程修改的?我正在尝试在表上创建一个insert、update和delete触发器,以便如果有人试图执行DML操作,它应该插入诸如MODIFED_date、MODIFED_by、,行id等。在这种情况下,我认为您可以像本文建议的那样执行以下操作:您使用的默认跟踪不包括谁修改了表中的行。根据本文,默认跟踪文件记录了所有对象的更改事件,我认为这将包括修改表中的行。我相信这意味着谁改变了结构改变了桌子。。。不是谁加了一行。“你为什么不试试,告诉我们你发现了什么呢?”本杰明·莫斯科维茨我在上个月创建的一张桌子上张贴并查看了最近发生的所有事件之前就试过了。我想知道它是否也适用于Rose。您使用的默认跟踪不包括谁修改了表中的行。根据本文,默认跟踪文件将记录所有对象更改事件,我认为这将包括修改表中的行。我相信这意味着谁改变了结构改变了桌子。。。不是谁加了一行。“你为什么不试试,告诉我们你发现了什么呢?”本杰明·莫斯科维茨我在上个月创建的一张桌子上张贴并查看了最近发生的所有事件之前就试过了。我想知道这对Rose是否同样有效。