powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отследить событие
12 сообщений из 12, страница 1 из 1
Отследить событие
    #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
Отследить событие
    #40044899
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отследить событие
    #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
Отследить событие
    #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
Отследить событие
    #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
Отследить событие
    #40045323
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?
...
Рейтинг: 0 / 0
Отследить событие
    #40045350
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Интересно, тредстартер знает, что обновление данных в таблице можно провести через merge или его запрос переписать так, что под фильтр он не попадет?

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


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

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



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

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


Ну, не фсе хакеры останавливаются на уровне 1с.
...
Рейтинг: 0 / 0
Отследить событие
    #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
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отследить событие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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