SQL знает, какие запросы были выполнены - PullRequest
0 голосов
/ 10 декабря 2011

Возможно ли получить информацию в SQL Server 2008, какой пользователь выполнил какой запрос? Если кто-то изменит вид, например, информация будет сохранена в DDL_Log.

У меня нет аудита для одной таблицы, и я должен знать, какой пользователь exec, какие запросы можно узнать?

Я должен знать, например, что пользователь X делает

SELECt id FROM Person

или, например, пользователь Y сделать

UPDATE TOP(1) Person SET Name = 'John' WHERE id = 6

1 Ответ

2 голосов
/ 10 декабря 2011

Рассмотрите возможность использования sp_trace_xxx процедур для захвата активности:

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @traceoptions int
declare @stoptime datetime
set @traceoptions = 2
set @maxfilesize = 999  
set @stoptime = '2011-12-10 19:20:00'

exec @rc = sp_trace_create @TraceID output, 0, N'd:\sql server\deftrace', @maxfilesize, @stoptime

if (@rc != 0) goto error

-- Set the events
declare @on bit
set @on = 1
-- SQL:BatchCompleted events
exec sp_trace_setevent @TraceID, 12, 1, @on -- textdata
exec sp_trace_setevent @TraceID, 12, 9, @on -- client process id
exec sp_trace_setevent @TraceID, 12, 10, @on -- application name
exec sp_trace_setevent @TraceID, 12, 11, @on -- login name
exec sp_trace_setevent @TraceID, 12, 12, @on -- spid
exec sp_trace_setevent @TraceID, 12, 13, @on -- duration (usec)
exec sp_trace_setevent @TraceID, 12, 14, @on -- start time
exec sp_trace_setevent @TraceID, 12, 15, @on -- end time
exec sp_trace_setevent @TraceID, 12, 16, @on -- reads
exec sp_trace_setevent @TraceID, 12, 17, @on -- writes
exec sp_trace_setevent @TraceID, 12, 18, @on -- cpu
exec sp_trace_setevent @TraceID, 12, 34, @on -- object name
exec sp_trace_setevent @TraceID, 12, 35, @on -- database name

-- RPC:Completed events
exec sp_trace_setevent @TraceID, 10, 1, @on -- textdata
exec sp_trace_setevent @TraceID, 10, 9, @on -- client process id
exec sp_trace_setevent @TraceID, 10, 10, @on -- application name
exec sp_trace_setevent @TraceID, 10, 11, @on -- login name
exec sp_trace_setevent @TraceID, 10, 12, @on -- spid
exec sp_trace_setevent @TraceID, 10, 13, @on -- duration (usec)
exec sp_trace_setevent @TraceID, 10, 14, @on -- start time
exec sp_trace_setevent @TraceID, 10, 15, @on -- end time
exec sp_trace_setevent @TraceID, 10, 16, @on -- reads
exec sp_trace_setevent @TraceID, 10, 17, @on -- writes
exec sp_trace_setevent @TraceID, 10, 18, @on -- cpu
exec sp_trace_setevent @TraceID, 10, 34, @on -- object name
exec sp_trace_setevent @TraceID, 10, 35, @on -- database name

-- Filter out the SQL Profiler events
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler'

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error:
select ErrorCode=@rc

finish:
go

Затем запустите:

exec sp_trace_setstatus @TraceID, 0
exec sp_trace_setstatus @TraceID, 2

Чтобы остановить трассировку (или подождать до @stoptime). Для просмотра выполненных запросов выполните:

SELECT DatabaseName, TextData, Reads, Writes, CPU, SPID, Duration / 1000 Duration, StartTime, EndTime, ClientProcessID, LoginName, ApplicationName
FROM fn_trace_gettable('d:\sql server\deftrace.trc', default);

Эти примеры кода полезны для диагностики и профилирования запросов. Приложив немного настроек, вы можете использовать их только для регистрации команд, пользователей и временных меток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...