【问题标题】:Audit Log Not Updating审核日志未更新
【发布时间】:2019-07-27 02:27:43
【问题描述】:

我希望记录对我的表所做的任何更新。所以我决定搜索它并发现创建数据库触发器。我遵循了一个教程,并且成功地记录了对表所做的任何更改,但没有记录任何已完成的更新。遵循本教程:https://jackworthen.com/2018/03/19/creating-a-log-table-to-track-changes-to-database-objects-in-sql-server/

查询:

CREATE TRIGGER [backup_objects]
ON DATABASE
FOR CREATE_PROCEDURE, 
    ALTER_PROCEDURE, 
    DROP_PROCEDURE,
    CREATE_TABLE, 
    ALTER_TABLE, 
    DROP_TABLE,
    CREATE_FUNCTION, 
    ALTER_FUNCTION, 
    DROP_FUNCTION,
    CREATE_VIEW,
    ALTER_VIEW,
    DROP_VIEW
AS

SET NOCOUNT ON

DECLARE @data XML
SET @data = EVENTDATA()

INSERT INTO [dbo].UserChangelog(databasename, eventtype, 
    objectname, objecttype, sqlcommand, loginname)
VALUES(
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'), 
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'), 
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'), 
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'), 
@data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)


GO

我认为触发器丢失了,“UPDATE_TABLE”但不幸的是它甚至不存在。

有人知道我可能需要在触发器中添加什么吗?从技术上讲,我不需要它专注于整个数据库,但这只是一个奖励。

【问题讨论】:

  • 我认为您的触发器缺少“更新时”语句...
  • @Karlomanio on_update 是无效的事件类型。
  • 什么是 EVENTDATA()?
  • 您在 UPDATE 中查找哪些信息?通常,对 UPDATES 表的审计会查找对数据所做的更改,但您的列似乎没有传达这一点。
  • @HereGoes 只是在寻找新的更新值。

标签: sql sql-server


【解决方案1】:

试试……

CREATE TRIGGER [backup_objects]
   ON on_your_table AFTER INSERT, DELETE, UPDATE AS ....

【讨论】:

猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2021-07-11
  • 2019-10-02
  • 2018-07-09
  • 2016-03-23
  • 2011-03-18
相关资源
最近更新 更多