Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Триггер на exec procedure  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Доброго времени суток!
СУБД: SQL Server 2008R2 Data Center

Есть задача вести логирование запуска процедур. Я решил смотреть в сторону триггеров, но обнаружил, что ни в dml, yb в ddl триггерах нет события execute.
Можно ли повесить триггер на выполнение хранимой процедуры? Или есть какие другие способы логирования запуска хранимок?
24 фев 14, 18:10    [15621517]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Профайлер жи.
24 фев 14, 18:11    [15621524]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич,

Инфа о запуске процедур должна писаться в таблицу, что бы потом мог другой пользователь глянуть, да и писать должны запуск процедур только у определенных юзеров.
24 фев 14, 18:14    [15621547]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
andrew shalaev
Гавриленко Сергей Алексеевич,

Инфа о запуске процедур должна писаться в таблицу, что бы потом мог другой пользователь глянуть, да и писать должны запуск процедур только у определенных юзеров.
Трасса может быть записана в таблицу.
24 фев 14, 18:17    [15621568]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич,

Профайлер создает нагрузку на работу системы, а она и так высоконагружена, есть ли еще способ?
24 фев 14, 18:18    [15621582]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
andrew shalaev
Гавриленко Сергей Алексеевич,

Профайлер создает нагрузку на работу системы, а она и так высоконагружена, есть ли еще способ?
Добавить логирование в каждую процедуру.
24 фев 14, 18:19    [15621587]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
o-o
Guest
можно аудит на базу повесить, именно на EXECUTE.
про то, насколько загрузит, не подскажу

CREATE DATABASE AUDIT SPECIFICATION [aero_exec_audit]
FOR SERVER AUDIT [aero_audit]
ADD (EXECUTE ON DATABASE::AERO BY PUBLIC)
WITH (STATE = OFF)
GO
24 фев 14, 18:57    [15621843]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
DKasimov
Member

Откуда: Москва
Сообщений: 63
andrew shalaev,

Можно в хп дописать строку кода, что будет писать в нужную вам таблицу.
Это интересно, если интересует одна или пару сторок, но аудит надежнее, т.к. табличку можно редактировать, а аудит, без доступа к файлу - сложно
25 фев 14, 08:30    [15623522]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
DKasimov
Можно в хп дописать строку кода, что будет писать в нужную вам таблицу.
Это интересно, если интересует одна или пару сторок, но аудит надежнее, т.к. табличку можно редактировать, а аудит, без доступа к файлу - сложно


Если дописывать строчки в хранимках то как выявлять информацию для лога.
Например

if SYSTEM_USER = 'login'

текущее время я узнаю через select getdate()

желательно знать имя процедуры, в идеале еще и с какими параметрами она запускается.
Не хотелось бы в каждой хранимке писать ручками имя процы.

Например в триггере можно пользоваться функией EVENTDATA( ) но вне триггера она не работает.

Есть ли аналог EVENTDATA( ) вне триггера?
26 фев 14, 18:21    [15634881]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
o-o
Guest
andrew shalaev,

имя процедуры лежит в @@PROCID,
OBJECT_NAME(@@PROCID) даст имя.
не надо рассчитывать на SYSTEM_USER,
если процедура имеет with execute as,
то SYSTEM_USER выдаст не логин исполнителя, а логин того, кто в with execute as.
используйте ORIGINAL_LOGIN().
26 фев 14, 20:05    [15635478]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
Веrd
Member

Откуда: Лазаревское
Сообщений: 588
andrew shalaev
Доброго времени суток!
СУБД: SQL Server 2008R2 Data Center

Есть задача вести логирование запуска процедур. Я решил смотреть в сторону триггеров, но обнаружил, что ни в dml, yb в ddl триггерах нет события execute.
Можно ли повесить триггер на выполнение хранимой процедуры? Или есть какие другие способы логирования запуска хранимок?

Кэп гарантирует, что логирование можно встроить во все процедуры отдельно.

Если лень в каждую отдельно впихивать, можно написать универсальную процедуру для логирования и автоматизированно вписать вызов этой процедуры во все хранимки.
26 фев 14, 21:10    [15635778]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
andrew shalaev
Гавриленко Сергей Алексеевич,

Профайлер создает нагрузку на работу системы, а она и так высоконагружена, есть ли еще способ?


Не создает, если писать на другой сервер.
28 фев 14, 15:48    [15647292]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на exec procedure  [new]
профайлер
Guest
Владислав Колосов
andrew shalaev
Гавриленко Сергей Алексеевич,
Профайлер создает нагрузку на работу системы, а она и так высоконагружена, есть ли еще способ?

Не создает, если писать на другой сервер.
Что, совсем-совсем не создаёт?
3 мар 14, 16:36    [15664156]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить