开始使用免费开始使用

数据库审计

下一项任务是开发一个新的触发器,用于审计数据库对象的变更。

您需要在数据库级别创建此触发器。您可以使用 DDL_TABLE_VIEW_EVENTS 事件组来触发该触发器。该事件组涵盖所有涉及表、视图、索引或统计信息的数据库操作。通过使用事件组,您无需逐一指定所有事件。

触发器将把触发语句的详细信息(事件、用户、查询等)插入到 DatabaseAudit 表中。

本练习是课程的一部分

在 SQL Server 中构建与优化触发器

查看课程

练习说明

  • 在数据库上创建一个 DatabaseAudit 触发器,使其在 DDL_TABLE_VIEW_EVENTS 时触发。

交互式实操练习

通过完成这段示例代码来试试这个练习。

-- Create a new trigger
CREATE TRIGGER ___
-- Attach the trigger at the database level
ON ___
-- Fire the trigger for all tables/ views events
FOR ___
AS
	INSERT INTO DatabaseAudit (EventType, DatabaseName, SchemaName, Object, ObjectType, UserAccount, Query, EventTime)
	SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(50)') AS EventType
		  ,EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(50)') AS DatabaseName
		  ,EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(50)') AS SchemaName
		  ,EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)') AS Object
		  ,EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]', 'NVARCHAR(50)') AS ObjectType
		  ,EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)') AS UserAccount
		  ,EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(MAX)') AS Query
		  ,EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME') AS EventTime;
编辑并运行代码