資料庫稽核
你的下一個任務是開發一個新的觸發程序,用來稽核資料庫物件的變更。
你需要在資料庫層級建立這個觸發程序。你可以使用 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;