Сегодня я столкнулся с ситуацией, когда для меня и моей компании было бы очень полезно, если бы мы знали, кто вошел в SQL и выполнил некоторые удаления.
У нас есть ситуация, когда как минимум 2 (иногда 3) человека входят в SQL с помощью SQL Server Management Studio и выполняют различные функции.
Что нам нужно, так это контрольный журнал. Если кто-то удаляет записи (ошибочно или иначе), я хотел бы знать, что было сделано.
Есть ли способ сделать это?
Вы можете настроить триггеры DML, использовать журнал транзакций базы данных для чтения информации о транзакции (DELETE), использовать собственные функции SQL Server:
или используйте сторонние инструменты
ApexSQL имеет два инструмента аудита - ApexSQL Log и ApexSQL Audit. Есть определенные преимущества использования одного над другим, например:
Отказ от ответственности: я работаю инженером по поддержке продуктов в ApexSQL
Вы можете использовать несколько различных инструментов. Если у вас SQL Server 2008 или выше, есть встроенный аудит, который может собирать эту информацию.
В противном случае вы можете получить информацию с помощью SQL Profiler или трассировки на стороне сервера.
Если ваша база данных находится в процессе полного восстановления, вы можете покопаться в журнале транзакций с помощью Log Explorer или LiteSpeed для SQL Server. Есть несколько недокументированных команд, которые можно использовать, если вы хотите написать свой собственный материал.
Для такого рода вещей у нас есть Idera Compliance Manager, хотя я уверен, что есть и другие поставщики с подобными продуктами.
Как сказал @mrdenny, в 2008 году появилась встроенная функция аудита. Вы можете начать с этот и этот статьи.
Также вы можете ознакомиться с этим техническим документом:Аудит в SQL Server 2008 и Понимание аудита SQL Server
Имейте в виду, что профилировщик SQL связан с большими накладными расходами.