powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Включение триггеров. Как отследить, выловить кто это делает?
11 сообщений из 11, страница 1 из 1
Включение триггеров. Как отследить, выловить кто это делает?
    #39969761
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Microsoft SQL Server 2016 (SP2-CU4) (KB4464106) - 13.0.5233.0 (X64)

Есть триггеры, которые запрещены (disabled). Иногда они включаются (enabled). Происходит это именно в какой то таблице. Т.е. есть несколько дизейбленных триггеров на одной из таблиц, и вдруг они все включаются. Через некоторое время это может произойти и в другой таблице.
Ощущение, что сами по себе! Не верю, что такое возможно само по себе. Явно есть некий скрипт или процедура, которые это зачем то делают.
Вопрос такой - как отследить, "поймать за руку" этот процесс, скрипт, процедуру?

Очень прошу, пишите по существу вопроса.
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969768
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Profiler / extended events / ddl trigger
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969769
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoykoSlava,

использовать средства аудита,
или, банально, добавить в "самовключающиеся" триггеры кусок кода, который сделает запись в лог
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969793
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

спасибо. Попробую
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969794
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
BoykoSlava,

использовать средства аудита,
или, банально, добавить в "самовключающиеся" триггеры кусок кода, который сделает запись в лог


Про аудит начитался уже. Но не понял сразу, как его использовать. Видимо, нужно меня за руку проводить.
В триггеры код сразу был добавлен. Факт срабатывания в лог пишется, даже смс отправляется. Но нужен не факт "поджога" триггера, а факт его enable-а
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969809
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoykoSlava,

Вам советовали DDL триггер, но он не поможет потому что не умеет отлавливать disable/enable trigger инструкции.

Здесь использование только или аудита или трассировки
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969814
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoykoSlava,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create server audit MyServerAudit
  to file (filepath = 'C:\Windows\TEMP\', maxsize = 1 gb)
  with (on_failure = continue);
go

alter server audit MyServerAudit with (state = on);
go

create database Test001;
go

use Test001;
go

create database audit specification schema_change
for server audit MyServerAudit
add (schema_object_change_group)
with (state = on);
go

create table dbo.t (id int);
go

create trigger dbo.tr_t
on dbo.t
after insert
as
begin
 set nocount on;
end;
go

alter table dbo.t disable trigger tr_t;
alter table dbo.t enable trigger tr_t;

disable trigger tr_t on dbo.t;
enable trigger tr_t on dbo.t;

waitfor delay '00:00:01';
go

select 
 x.statement, x.* 
from
 sys.server_audits sa cross apply
 sys.fn_get_audit_file('C:\Windows\Temp\MyServerAudit_' + cast(sa.audit_guid as varchar(36)) + '*', null, null) x
where
 sa.name = 'MyServerAudit' and
 statement like '%trigg%'
order by
 sequence_number;
go

use master
go

alter database Test001 set single_user with rollback immediate;
drop database Test001;
go

if exists(select 1 from sys.server_audits where name = N'MyServerAudit')
 begin
  alter server audit MyServerAudit with (state = off);
  drop server audit MyServerAudit;
 end;
go

...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969939
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
BoykoSlava,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create server audit MyServerAudit
  to file (filepath = 'C:\Windows\TEMP\', maxsize = 1 gb)
  with (on_failure = continue);
go

alter server audit MyServerAudit with (state = on);
go

create database Test001;
go

use Test001;
go

create database audit specification schema_change
for server audit MyServerAudit
add (schema_object_change_group)
with (state = on);
go

create table dbo.t (id int);
go

create trigger dbo.tr_t
on dbo.t
after insert
as
begin
 set nocount on;
end;
go

alter table dbo.t disable trigger tr_t;
alter table dbo.t enable trigger tr_t;

disable trigger tr_t on dbo.t;
enable trigger tr_t on dbo.t;

waitfor delay '00:00:01';
go

select 
 x.statement, x.* 
from
 sys.server_audits sa cross apply
 sys.fn_get_audit_file('C:\Windows\Temp\MyServerAudit_' + cast(sa.audit_guid as varchar(36)) + '*', null, null) x
where
 sa.name = 'MyServerAudit' and
 statement like '%trigg%'
order by
 sequence_number;
go

use master
go

alter database Test001 set single_user with rollback immediate;
drop database Test001;
go

if exists(select 1 from sys.server_audits where name = N'MyServerAudit')
 begin
  alter server audit MyServerAudit with (state = off);
  drop server audit MyServerAudit;
 end;
go



Вот спасибо!
Проверю, если сработает - тему можно считать закрытой :)
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969943
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
BoykoSlava,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create server audit MyServerAudit
  to file (filepath = 'C:\Windows\TEMP\', maxsize = 1 gb)
  with (on_failure = continue);
go

alter server audit MyServerAudit with (state = on);
go

create database Test001;
go

use Test001;
go

create database audit specification schema_change
for server audit MyServerAudit
add (schema_object_change_group)
with (state = on);
go

create table dbo.t (id int);
go

create trigger dbo.tr_t
on dbo.t
after insert
as
begin
 set nocount on;
end;
go

alter table dbo.t disable trigger tr_t;
alter table dbo.t enable trigger tr_t;

disable trigger tr_t on dbo.t;
enable trigger tr_t on dbo.t;

waitfor delay '00:00:01';
go

select 
 x.statement, x.* 
from
 sys.server_audits sa cross apply
 sys.fn_get_audit_file('C:\Windows\Temp\MyServerAudit_' + cast(sa.audit_guid as varchar(36)) + '*', null, null) x
where
 sa.name = 'MyServerAudit' and
 statement like '%trigg%'
order by
 sequence_number;
go

use master
go

alter database Test001 set single_user with rollback immediate;
drop database Test001;
go

if exists(select 1 from sys.server_audits where name = N'MyServerAudit')
 begin
  alter server audit MyServerAudit with (state = off);
  drop server audit MyServerAudit;
 end;
go



Попробовал. селект ничего не выдает. Если убрать условия, то выдает всего одну строку с пустым значение в поле statement
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969971
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoykoSlava,

Пример был дан работающий.
Неизвестно как вы его адаптировали под свое окружение.
...
Рейтинг: 0 / 0
Включение триггеров. Как отследить, выловить кто это делает?
    #39969982
BoykoSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
BoykoSlava,

Пример был дан работающий.
Неизвестно как вы его адаптировали под свое окружение.


Да, пример вполне работающий!
Буду разбираться в своей реализации
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Включение триггеров. Как отследить, выловить кто это делает?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]