【问题标题】:How to find who last modified the table in SQL server?如何在 SQL Server 中查找上次修改表的人?
【发布时间】:2015-04-23 21:19:33
【问题描述】:

我正在尝试查找上次修改 SQL Server 中特定表的用户。 sys.dm_db_index_usage_stats 提供有关表的最后修改日期的信息,但我正在寻找最后修改者。有没有办法找出最后修改特定表的登录名?

【问题讨论】:

  • 表是用户直接修改还是通过存储过程修改的?
  • 我正在尝试在表上创建一个插入、更新和删除触发器,以便如果有人尝试执行 DML 操作,它应该在日志表中插入 modified_date、modified_by、row_id 等信息。
  • 在这种情况下,我认为您可以按照本文的建议执行以下操作:simple-talk.com/sql/database-administration/…

标签: sql sql-server


【解决方案1】:

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

如果这是针对已经发生的事情,那么我认为你可能不走运。

【讨论】:

    【解决方案2】:

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

    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; 
    

    【讨论】:

    • 您正在使用默认跟踪,其中不包括谁修改了表中的行。
    • 根据本文here,默认跟踪文件记录所有对象更改事件(我认为这将包括修改表中的一行)。 simple-talk.com/sql/performance/…
    • 我相信这意味着谁更改了结构(更改表...)而不是谁添加了一行。你为什么不试试看,告诉我们你发现了什么。
    • @benjamin moskovits 我在发布之前尝试过这个,并在上个月创建的表格上看到了所有最近的事件。我想知道它是否会以同样的方式对 Rose 起作用。
    【解决方案3】:

    感谢大家调查我的问题并提供建议。我在触发器中使用了以下脚本来获取 last_modified_by。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多