imarchenko
Yak Posting Veteran
57 Posts |
Posted - 2009-10-09 : 13:19:46
|
Hello! I would like to implement SQL Server auditing using DDL triggers (capture DML, permission, etc. audit log). I was wondering how much overhead this would add. I am planning to implement DML trigger for each user defined database and on server level. Our environment is high transactional OLTP SQL Server 2005 SP2.Comments are appreciated,Igor |
|
imarchenko
Yak Posting Veteran
57 Posts |
Posted - 2009-10-12 : 19:41:56
|
This is what I am trying to do:...create trigger trg_audit_server_changeson ALL serverfor CREATE_DATABASE,ALTER_DATABASE, DROP_DATABASE, CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN, GRANT_SERVER, DENY_SERVER,REVOKE_SERVER, ALTER_AUTHORIZATION_SERVER asset nocount ondeclare @data xmlset @data = EVENTDATA()insert into DBA.dbo.AuditChangeLog (databasename, eventtype, objectname, objecttype, sqlcommand, loginname)values('Server',--@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'), @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'), @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'), @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)'))GO/*********************************************************/--generate audit trigger for each user defined databaseDECLARE @strSQL VARCHAR(MAX)SELECT @strSQL='IF EXISTS ( SELECT * FROM sys.triggers WHERE name = ''trg_audit_database_changes'' ) DROP TRIGGER trg_audit_database_changes ON databaseGO CREATE TRIGGER TRG_AUDIT_DATABASE_CHANGESON DATABASEFOR DDL_DATABASE_LEVEL_EVENTSASSET NOCOUNT ONdeclare @data xmlset @data = EVENTDATA()INSERT INTO DBA.dbo.AuditChangeLog(databasename, eventtype, objectname, objecttype, sqlcommand, loginname)values(@data.value(''(/EVENT_INSTANCE/DatabaseName)[1]'', ''varchar(256)''),@data.value(''(/EVENT_INSTANCE/EventType)[1]'', ''varchar(50)''), @data.value(''(/EVENT_INSTANCE/ObjectName)[1]'', ''varchar(256)''), @data.value(''(/EVENT_INSTANCE/ObjectType)[1]'', ''varchar(25)''), @data.value(''(/EVENT_INSTANCE/TSQLCommand)[1]'', ''varchar(max)''), @data.value(''(/EVENT_INSTANCE/LoginName)[1]'', ''varchar(256)''))GO... |
 |
|