SQL Server 2008 R2 - Power User Audit Sample (DDL Trigger)
-- Create a database
CREATE DATABASE DDLTrigger
GO
USE DDLTrigger
GO
-- Create a table to hold results
CREATE TABLE info_ddl (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100))
GO
-- Now create a Trigger
CREATE TRIGGER ddl_test
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
INSERT info_ddl
(PostTime, DB_User, Event)
VALUES
(GETDATE(), CONVERT(nvarchar(100), CURRENT_USER),
EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'))
GO
-- Create a table in Database
CREATE TABLE TestDDlTrigger (a int,b int,c int)
GO
-- Create procedure in Database
CREATE PROCEDURE spTest
AS
SELECT * FROM sys.all_objects
GO
-- Check our table which holds the data
SELECT * FROM info_ddl
GO
-- Now we drop the table and procedure from Database
DROP TABLE TestDDlTrigger;
GO
DROP PROCEDURE spTest
GO
-- Again check the audit data
SELECT * FROM info_ddl
GO
-- Adding additional column to table to store T-SQL
ALTER TABLE info_ddl ADD TSQL VARCHAR(2000)
GO
-- Recreate the DDL Trigger
DROP TRIGGER ddl_test
ON DATABASE
GO
CREATE TRIGGER ddl_test
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
INSERT info_ddl
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(), CONVERT(nvarchar(100), CURRENT_USER),
EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'))
GO
-- Create a table in Database
CREATE TABLE TestDDlTrigger (a int,b int,c int)
GO
-- Create procedure in Database
CREATE PROCEDURE spTest
AS
SELECT * FROM sys.all_objects
GO
-- Check our table which holds the data
SELECT * FROM info_ddl
GO
REFERENCES:
- Designing DDL Triggers: https://msdn.microsoft.com/en-us/library/ms186406.aspx
- DDL Events: https://msdn.microsoft.com/en-us/library/bb522542.aspx