Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Tạo trigger DatabaseAudit trên cơ sở dữ liệu, kích hoạt cho DDL_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;
Chỉnh sửa và Chạy Mã