April 7, 2011 at 10:00 am
Hi I'm using SQL 2005
I'm currently using service broker to capture Event Notifications
For the event ALTER_LOGIN, I'm having issues capturing the command being generated. I'm only able to capture the event_type and object name.
I been playing around with different parameters but unable to make it work. Can anyone confirm if ALTER_LOGIN event generates any TSQL command for data capture?
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_audit_event]
AS
SET NOCOUNT ON
DECLARE @count INT
DECLARE @msgtypeid INT
DECLARE @msg VARBINARY(MAX)
DECLARE @servername varchar(100)
DECLARE @eventtype varchar(100)
DECLARE @loginname varchar(100)
DECLARE @dbname varchar(100)
DECLARE @cmd varchar(500)
DECLARE @posttime smalldatetime
DECLARE @xmlmsg xml
set @count = (select count(*) from DBANotifyQueue)
WHILE @count > 0
BEGIN
WAITFOR(
RECEIVE top(1)
@msgtypeid = message_type_id,
@msg = message_body
FROM DBANotifyQueue
)
set @xmlmsg = @msg
select (convert(nvarchar(max),@msg))
set @servername = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/ServerName[1]','varchar(100)') )
set @eventtype = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/EventType[1]','varchar(100)') )
set @loginname = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/LoginName[1]','varchar(100)') )
set @dbname =(SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/DatabaseName[1]','varchar(100)'))
IF @eventtype = 'DROP_ROLE_MEMBER'
set @cmd = 'sp_droprolemember ' + (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/RoleName[1]','varchar(500)')) + ', ' + (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/ObjectName[1]','varchar(500)'))
ELSE
IF @eventtype = 'ALTER_LOGIN'
set @cmd = (SELECT @xmlmsg.value('(/EVENT_INSTANCE/EventType)[1]','varchar(500)')) + ', ' + (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/ObjectName[1]','varchar(500)'))
--set @cmd = (SELECT @xmlmsg.value('(/EVENT_INSTANCE/EventType)[1]','varchar(500)')) + ', ' + (SELECT @xmlmsg.value('(/EVENT_INSTANCE/TSQLCommand)[1]','varchar(max)'))
--set @cmd = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/TSQLCommand[1]/CommandText[1]','varchar(max)'))
else
set @cmd = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/TSQLCommand[1]/CommandText[1]','varchar(500)'))
set @posttime = (SELECT @xmlmsg.value('/EVENT_INSTANCE[1]/PostTime[1]','smalldatetime'))
INSERT INTO msdb.dbo.auditevent (servername, eventtype,loginname,dbname,command,posttime)
values(@servername,@eventtype,@loginname,@dbname,@cmd,@posttime)
set @count = @count - 1
END
Viewing post 1 (of 1 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy