Kiểm toán cơ sở dữ liệu
Nhiệm vụ tiếp theo của bạn là xây dựng một trigger mới để kiểm toán các thay đổi đối với đối tượng trong cơ sở dữ liệu.
Bạn cần tạo trigger ở cấp cơ sở dữ liệu. Bạn có thể dùng nhóm sự kiện DDL_TABLE_VIEW_EVENTS để kích hoạt trigger. Nhóm sự kiện này bao gồm mọi thao tác trên cơ sở dữ liệu liên quan đến bảng, view, index hoặc thống kê. Nhờ dùng nhóm sự kiện, bạn không phải chỉ định từng sự kiện riêng lẻ.
Trigger sẽ chèn thông tin chi tiết về câu lệnh đã kích hoạt nó (sự kiện, người dùng, truy vấn, v.v.) vào bảng DatabaseAudit.
Bài tập này là một phần của khóa học
Xây dựng và Tối ưu hóa Trigger trong SQL Server
Hướng dẫn bài tập
- Tạo trigger
DatabaseAudittrên cơ sở dữ liệu, kích hoạt choDDL_TABLE_VIEW_EVENTS.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
-- 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;