Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отследить событие / 12 сообщений из 12, страница 1 из 1
12.02.2021, 16:05
    #40044888
Grogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Доброго здоровья!

Стоит задача отловить и зафиксировать запросы вида:

RPC:completed

exec sp_executesql N'UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15652 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)',N'@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)',0x01,0x3DD77835E17A41418B58BB2FD64C39BA,0

Цветом выделены то, что может изменяться. Таблицы и числовые значения.

Вопрос: как это сделать лучше всего?

Триггер сделать, но у меня таблиц за которыми следить таким образом надо штук 40, это штук 40 триггеров надо получается? Как это скажется на нагрузке на сервер?

С помощью расширенных событий если, то не нашел как настроить фильтр именно на этот запрос. Все подряд собирать, думаю не лучшая идея.

Подскажите пожалуйста, голова опухает если честно.
...
Рейтинг: 0 / 0
12.02.2021, 16:52
    #40044899
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
...
Рейтинг: 0 / 0
13.02.2021, 13:42
    #40045058
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Grogan
Доброго здоровья!

Стоит задача отловить и зафиксировать запросы вида:

RPC:completed

exec sp_executesql N'UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15652 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)',N'@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)',0x01,0x3DD77835E17A41418B58BB2FD64C39BA,0

Цветом выделены то, что может изменяться. Таблицы и числовые значения.

Вопрос: как это сделать лучше всего?

Триггер сделать, но у меня таблиц за которыми следить таким образом надо штук 40, это штук 40 триггеров надо получается? Как это скажется на нагрузке на сервер?

С помощью расширенных событий если, то не нашел как настроить фильтр именно на этот запрос. Все подряд собирать, думаю не лучшая идея.

Подскажите пожалуйста, голова опухает если честно.


Что такое 40 таблиц? Ерунда.
Но триггер - оно надежнее.

А "событие" можно объехать на хромой козе.
...
Рейтинг: 0 / 0
13.02.2021, 17:36
    #40045087
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Если версия или редакция позволяют то аудит
https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver15
Построен на базе extended events
...
Рейтинг: 0 / 0
15.02.2021, 01:49
    #40045310
Grogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Спасибо за ответы!

Опыта мало к сожалению, поэтому получилось пока так сделать:

CREATE EVENT SESSION [Audit] ON SERVER
ADD EVENT sqlserver.rpc_completed(SET collect_data_stream=(1),collect_output_parameters=(1),collect_statement=(1)
ACTION(sqlos.task_address,sqlos.task_elapsed_quantum,sqlos.task_time,sqlserver.client_app_name,sqlserver.context_info,sqlserver.database_name,sqlserver.request_id,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.server_principal_sid,sqlserver.session_resource_group_id,sqlserver.session_resource_pool_id,sqlserver.session_server_principal_name,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.transaction_sequence,sqlserver.username)
WHERE (((([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DataBase')) AND([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15652 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x01,0x3DD77835E17A41418B58BB2FD64C39BA,0')))OR ([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt25155 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x00,0x6BC52073D472D84EA1442D19230BB538,0')))OR ([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15700 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x00,0x61D7A2B5D82E1F46A73B314EDBC411D1,0')))OR ([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15701 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x00,0xCD37C20DA145F343BAACAE0B3FA22AF7,0')))OR ([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15651 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x00,0x1C0A0641CB09AA498D5697BB3A4075BF,0')))
....
Go

По каким то причинам не могу более трех фильтров вида:
([sqlserver].[equal_i_sql_unicode_string]([statement],N'exec sp_executesql N''UPDATE T1 SET _UseSplitter = @P1
FROM dbo._AccumRgOpt15701 T1
WHERE (T1._RegID = @P2) AND (T1._Fld770 = @P3)'',N''@P1 varbinary(1),@P2 varbinary(8000),@P3 numeric(10)'',0x00,0xCD37C20DA145F343BAACAE0B3FA22AF7,0')))

Добавить не могу. Появляется значек, как будто это процедура или функция и выдает ошибку.

Подскажите пожалуйтса в чем дело?
...
Рейтинг: 0 / 0
15.02.2021, 05:39
    #40045323
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?
...
Рейтинг: 0 / 0
15.02.2021, 10:00
    #40045350
VladimirKr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
aleks222
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?

Это 1с. Там ничего такого быть не может.
...
Рейтинг: 0 / 0
15.02.2021, 10:08
    #40045360
Grogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
aleks222
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?


Теперь знает. Но к созданию аудита посредством расширенных событий пока не приблизился.
...
Рейтинг: 0 / 0
15.02.2021, 10:08
    #40045363
Grogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
VladimirKr
aleks222
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?

Это 1с. Там ничего такого быть не может.



Все верно. Это 1с.
...
Рейтинг: 0 / 0
15.02.2021, 13:09
    #40045425
Grogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Так никто и не подскажет почему больше 3х фильтров не влазиет в скрипт?
...
Рейтинг: 0 / 0
15.02.2021, 13:19
    #40045428
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
VladimirKr
aleks222
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?

Это 1с. Там ничего такого быть не может.


Ну, не фсе хакеры останавливаются на уровне 1с.
...
Рейтинг: 0 / 0
15.02.2021, 13:40
    #40045438
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отследить событие
Grogan
Так никто и не подскажет почему больше 3х фильтров не влазиет в скрипт?


читайте документацию:
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-event-session-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отследить событие / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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