การตรวจสอบฐานข้อมูล
งานต่อไปคือการสร้าง trigger ใหม่เพื่อตรวจสอบการเปลี่ยนแปลงออบเจกต์ในฐานข้อมูล
ต้องสร้าง trigger ที่ระดับ database โดยใช้ group event DDL_TABLE_VIEW_EVENTS เพื่อให้ trigger ทำงาน group event นี้ครอบคลุมการดำเนินการกับ table, view, index และ statistics ทั้งหมด จึงไม่จำเป็นต้องระบุแต่ละ event แยกกัน
trigger นี้จะบันทึกรายละเอียดของคำสั่งที่ทำให้เกิดการทำงาน (event, user, query และอื่น ๆ) ลงในตาราง DatabaseAudit
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การสร้างและปรับแต่ง Trigger ใน SQL Server
คำแนะนำการฝึกหัด
- สร้าง trigger ชื่อ
DatabaseAuditบน database ให้ทำงานเมื่อเกิด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;