Триггер Sybase для поиска удаленного запроса - PullRequest
0 голосов
/ 28 января 2010

На моем сервере Sybase некоторые строки таблицы (TBL_RESOURCE) удаляются из неизвестного источника через произвольные интервалы. Я много пробовал, но не могу определить, из какого источника / файла / процесса эти данные удаляются. Есть ли механизм, чтобы найти эту проблему? Мне нужно выяснить, кто удаляет эти строки ..

Как мы можем узнать, кто его удалил и из какого файла?

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

Ответы [ 3 ]

2 голосов
/ 23 октября 2010

Хорошо, значит, у вас нет хранимых процедур или транзакций (что обеспечивает нормальную безопасность: предоставление разрешений только sprocs; никаких прямых обновлений таблиц от пользователей). поэтому у вас есть прямые гранты для пользователей. Это означает, что они могут вставлять / обновлять / удалять из любой клиентской программы, включая Excel. Поэтому вполне возможно, что в исходном коде приложения отсутствует сегмент кода, который удаляется из таблицы. Удаление строк в случайные моменты - это характер онлайновой базы данных; защита от несанкционированного удаления является требованием администратора баз данных.

Я предполагаю, что вы дали разрешения конкретным людям, а не всему миру, и вы не уверены точно, кто делает гадости. Самый простой - просто спросить группу.

Следующий простой способ - включить аудит для этой таблицы или для группы (или роли) разрешенных пользователей. Но если вы не настроили одитинг, это может стать препятствием.

В-третьих, триггер.

Существуют и другие методы, но они имеют значительные накладные расходы (22%), требуют значительных трудозатрат на внедрение, и вам придется разбираться с огромными объемами данных.

Если ваша среда настолько небезопасна и нестабильна, как кажется, и таблицу не следует удалять из нее, просто отмените разрешения для этой (одной) таблицы и подождите, пока кто-нибудь придет к вам, крича, что его разрешения изменились .

"Предполагается, что не каждый пользователь входит в систему как администратор БД или какая-либо другая [привилегированная] учетная запись."

Что, конечно, очень глупо делать, просить, умолять о катастрофе. Столь же глупо, как предоставление удалять все таблицы всем пользователям. Я вижу, откуда ты.

1 голос
/ 28 января 2010

Нечто подобное могло бы сработать.

create trigger deltrig 
on TBL_RESOURCE 
for delete 
as 
   BEGIN   
        insert  TBL_LOG (modifiedBy, modifiedDate)    
        select  user_name(), getdate() from deleted  
      END   

(очевидно, необходимо создать таблицу регистрации TBL_LOG)

0 голосов
/ 28 января 2010

да, вы можете использовать триггеры. см. sybase doc , чтобы узнать, как создавать триггеры удаления. В коде триггера вы можете зарегистрировать информацию (вставить), такую ​​как текущий пользователь, идентификатор пользователя и т. Д., В таблицу для аудита.

...