Tình huống dùng trigger DDL

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Florin Angelescu

Instructor

Khả năng của trigger DDL

Cơ sở dữ liệu Cấp cơ sở dữ liệu

CREATE_TABLE,ALTER_TABLE,DROP_TABLE

CREATE_VIEW,ALTER_VIEW,DROP_VIEW

CREATE_INDEX,ALTER_INDEX,DROP_INDEX

ADD_ROLE_MEMBER,DROP_ROLE_MEMBER

CREATE_STATISTICS,DROP_STATISTICS

Máy chủ Cấp máy chủ

CREATE_DATABASE,ALTER_DATABASE, DROP_DATABASE

GRANT_SERVER,DENY_SERVER, REVOKE_SERVER

CREATE_CREDENTIAL,ALTER_CREDENTIAL, DROP_CREDENTIAL

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ghi nhật ký cơ sở dữ liệu

CREATE TRIGGER DatabaseAudit
ON DATABASE
FOR DDL_TABLE_VIEW_EVENTS
AS
    INSERT INTO [DatabaseAudit] ([EventType], [Database], [Object],
                                 [UserAccount], [Query], [EventTime])
    SELECT
     EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(50)'),
     EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(50)'),
     EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)'),
     EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)'),
     EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(MAX)'),
     EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME');
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ghi nhật ký cơ sở dữ liệu

| EventType    | Database   | Object    | UserAccount | Query                   | EventTime  |
| CREATE_TABLE | FreshFruit | Sales     | XXX         | CREATE TABLE [Sales]... | 2019-05-13 |
| CREATE_TABLE | FreshFruit | Employees | XXX         | CREATE TABLE [Employ... | 2019-05-13 |
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ngăn thay đổi trên máy chủ

CREATE TRIGGER PreventDatabaseDelete
ON ALL SERVER   
FOR DROP_DATABASE
AS   
   PRINT 'Bạn không được phép xóa cơ sở dữ liệu hiện có.';
   ROLLBACK;
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ayo berlatih!

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Preparing Video For Download...