Description
Database trigger to audit all of the DDL changes made to the AdventureWorks2008 database. Yes!
Trigger properties
| name | value |
|---|
| name | ddlDatabaseTriggerLog |
| created | Mar 19 2009 9:09PM |
| modified | Mar 19 2009 9:10PM
|
| is disabled | 1 |
| is instead of | 0 |
| is not for replication | 0 |
| execute as | caller |
Trigger types
| type | is first | is last |
|---|
| CREATE_TABLE | 0 | 0 |
| ALTER_TABLE | 0 | 0 |
| DROP_TABLE | 0 | 0 |
| CREATE_VIEW | 0 | 0 |
| ALTER_VIEW | 0 | 0 |
| DROP_VIEW | 0 | 0 |
| CREATE_INDEX | 0 | 0 |
| ALTER_INDEX | 0 | 0 |
| DROP_INDEX | 0 | 0 |
| CREATE_XML_INDEX | 0 | 0 |
| ALTER_FULLTEXT_INDEX | 0 | 0 |
| CREATE_FULLTEXT_INDEX | 0 | 0 |
| DROP_FULLTEXT_INDEX | 0 | 0 |
| CREATE_SPATIAL_INDEX | 0 | 0 |
| CREATE_STATISTICS | 0 | 0 |
| UPDATE_STATISTICS | 0 | 0 |
| DROP_STATISTICS | 0 | 0 |
| CREATE_SYNONYM | 0 | 0 |
| DROP_SYNONYM | 0 | 0 |
| CREATE_FUNCTION | 0 | 0 |
| ALTER_FUNCTION | 0 | 0 |
| DROP_FUNCTION | 0 | 0 |
| CREATE_PROCEDURE | 0 | 0 |
| ALTER_PROCEDURE | 0 | 0 |
| DROP_PROCEDURE | 0 | 0 |
| CREATE_TRIGGER | 0 | 0 |
| ALTER_TRIGGER | 0 | 0 |
| DROP_TRIGGER | 0 | 0 |
| CREATE_EVENT_NOTIFICATION | 0 | 0 |
| DROP_EVENT_NOTIFICATION | 0 | 0 |
| CREATE_ASSEMBLY | 0 | 0 |
| ALTER_ASSEMBLY | 0 | 0 |
| DROP_ASSEMBLY | 0 | 0 |
| CREATE_TYPE | 0 | 0 |
| DROP_TYPE | 0 | 0 |
| CREATE_CERTIFICATE | 0 | 0 |
| ALTER_CERTIFICATE | 0 | 0 |
| DROP_CERTIFICATE | 0 | 0 |
| CREATE_USER | 0 | 0 |
| ALTER_USER | 0 | 0 |
| DROP_USER | 0 | 0 |
| ADD_ROLE_MEMBER | 0 | 0 |
| DROP_ROLE_MEMBER | 0 | 0 |
| CREATE_ROLE | 0 | 0 |
| ALTER_ROLE | 0 | 0 |
| DROP_ROLE | 0 | 0 |
| CREATE_APPLICATION_ROLE | 0 | 0 |
| ALTER_APPLICATION_ROLE | 0 | 0 |
| DROP_APPLICATION_ROLE | 0 | 0 |
| CREATE_SCHEMA | 0 | 0 |
| ALTER_SCHEMA | 0 | 0 |
| DROP_SCHEMA | 0 | 0 |
| GRANT_DATABASE | 0 | 0 |
| DENY_DATABASE | 0 | 0 |
| REVOKE_DATABASE | 0 | 0 |
| ALTER_AUTHORIZATION_DATABASE | 0 | 0 |
| CREATE_SYMMETRIC_KEY | 0 | 0 |
| ALTER_SYMMETRIC_KEY | 0 | 0 |
| DROP_SYMMETRIC_KEY | 0 | 0 |
| CREATE_ASYMMETRIC_KEY | 0 | 0 |
| ALTER_ASYMMETRIC_KEY | 0 | 0 |
| DROP_ASYMMETRIC_KEY | 0 | 0 |
| ADD_SIGNATURE_SCHEMA_OBJECT | 0 | 0 |
| DROP_SIGNATURE_SCHEMA_OBJECT | 0 | 0 |
| ADD_SIGNATURE | 0 | 0 |
| DROP_SIGNATURE | 0 | 0 |
| CREATE_MASTER_KEY | 0 | 0 |
| ALTER_MASTER_KEY | 0 | 0 |
| DROP_MASTER_KEY | 0 | 0 |
| CREATE_DATABASE_ENCRYPTION_KEY | 0 | 0 |
| ALTER_DATABASE_ENCRYPTION_KEY | 0 | 0 |
| DROP_DATABASE_ENCRYPTION_KEY | 0 | 0 |
| CREATE_DATABASE_AUDIT_SPECIFICATION | 0 | 0 |
| ALTER_DATABASE_AUDIT_SPECIFICATION | 0 | 0 |
| DROP_DATABASE_AUDIT_SPECIFICATION | 0 | 0 |
| CREATE_MESSAGE_TYPE | 0 | 0 |
| ALTER_MESSAGE_TYPE | 0 | 0 |
| DROP_MESSAGE_TYPE | 0 | 0 |
| CREATE_CONTRACT | 0 | 0 |
| DROP_CONTRACT | 0 | 0 |
| CREATE_QUEUE | 0 | 0 |
| ALTER_QUEUE | 0 | 0 |
| DROP_QUEUE | 0 | 0 |
| CREATE_SERVICE | 0 | 0 |
| ALTER_SERVICE | 0 | 0 |
| DROP_SERVICE | 0 | 0 |
| CREATE_ROUTE | 0 | 0 |
| ALTER_ROUTE | 0 | 0 |
| DROP_ROUTE | 0 | 0 |
| CREATE_REMOTE_SERVICE_BINDING | 0 | 0 |
| ALTER_REMOTE_SERVICE_BINDING | 0 | 0 |
| DROP_REMOTE_SERVICE_BINDING | 0 | 0 |
| CREATE_BROKER_PRIORITY | 0 | 0 |
| ALTER_BROKER_PRIORITY | 0 | 0 |
| DROP_BROKER_PRIORITY | 0 | 0 |
| CREATE_XML_SCHEMA_COLLECTION | 0 | 0 |
| ALTER_XML_SCHEMA_COLLECTION | 0 | 0 |
| DROP_XML_SCHEMA_COLLECTION | 0 | 0 |
| CREATE_PARTITION_FUNCTION | 0 | 0 |
| ALTER_PARTITION_FUNCTION | 0 | 0 |
| DROP_PARTITION_FUNCTION | 0 | 0 |
| CREATE_PARTITION_SCHEME | 0 | 0 |
| ALTER_PARTITION_SCHEME | 0 | 0 |
| DROP_PARTITION_SCHEME | 0 | 0 |
| BIND_DEFAULT | 0 | 0 |
| CREATE_DEFAULT | 0 | 0 |
| DROP_DEFAULT | 0 | 0 |
| UNBIND_DEFAULT | 0 | 0 |
| ALTER_EXTENDED_PROPERTY | 0 | 0 |
| CREATE_EXTENDED_PROPERTY | 0 | 0 |
| DROP_EXTENDED_PROPERTY | 0 | 0 |
| ALTER_FULLTEXT_CATALOG | 0 | 0 |
| CREATE_FULLTEXT_CATALOG | 0 | 0 |
| DROP_FULLTEXT_CATALOG | 0 | 0 |
| ALTER_PLAN_GUIDE | 0 | 0 |
| CREATE_PLAN_GUIDE | 0 | 0 |
| DROP_PLAN_GUIDE | 0 | 0 |
| BIND_RULE | 0 | 0 |
| CREATE_RULE | 0 | 0 |
| DROP_RULE | 0 | 0 |
| UNBIND_RULE | 0 | 0 |
| CREATE_FULLTEXT_STOPLIST | 0 | 0 |
| ALTER_FULLTEXT_STOPLIST | 0 | 0 |
| DROP_FULLTEXT_STOPLIST | 0 | 0 |
| RENAME | 0 | 0 |
Code
CREATE TRIGGER [ddlDatabaseTriggerLog] ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS AS
BEGIN
SET NOCOUNT ON;
DECLARE @data XML;
DECLARE @schema sysname;
DECLARE @object sysname;
DECLARE @eventType sysname;
SET @data = EVENTDATA();
SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname');
SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');
SET @object = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')
IF @object IS NOT NULL
PRINT ' ' + @eventType + ' - ' + @schema + '.' + @object;
ELSE
PRINT ' ' + @eventType + ' - ' + @schema;
IF @eventType IS NULL
PRINT CONVERT(nvarchar(max), @data);
INSERT [dbo].[DatabaseLog]
(
[PostTime],
[DatabaseUser],
[Event],
[Schema],
[Object],
[TSQL],
[XmlEvent]
)
VALUES
(
GETDATE(),
CONVERT(sysname, CURRENT_USER),
@eventType,
CONVERT(sysname, @schema),
CONVERT(sysname, @object),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)'),
@data
);
END;