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

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

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

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

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

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


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

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

Здесь использование только или аудита или трассировки
...
Рейтинг: 0 / 0
16.06.2020, 16:00
    #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
16.06.2020, 20:21
    #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
16.06.2020, 20:37
    #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
16.06.2020, 22:36
    #39969971
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение триггеров. Как отследить, выловить кто это делает?
BoykoSlava,

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

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


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


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