Какая информация аудита сохраняется на сервере sql при выполнении операций CREATE TABLE или ALTER TABLE?
-
13-09-2019 - |
Вопрос
Вдохновением для этого вопроса послужило то, что у меня сломалась хранимая процедура, потому что она вызвала другую хранимую процедуру, которая вставила данные в таблицу, схема которой была полностью изменена.
Вопрос в том, что у вас есть таблица в базе данных SQL Server, и вы не знаете, как она туда попала.У вас нет триггеров DDL для настраиваемой информации аудита, и в вашем репозитории системы управления версиями нет записей о таблицах DDL.Какие аналитические данные о таблице можно получить, используя только SQL Server?
Мне и всем, кто сталкивается с этим вопросом в подобной ситуации, предложения относительно контроля версий и триггеров DDL не помогут.Это отличные перспективные решения, и в этом блоге есть много информации по этим темам, если корпоративная политика позволяет нам реализовать эти решения.Что мне и людям в моей ситуации действительно нужно, так это иметь возможность собирать как можно больше фрагментов данных с SQL-сервера для объединения с любыми другими данными, которые мы можем найти.
Решение
К сожалению, у вас нет возможности восстановить то, что произошло, кроме как:
если у администраторов баз данных есть трассировки и история.SQL Server 2005 имеет трассировку по умолчанию, а также трассировку «черного ящика», но они используются для выяснения того, что произошло непосредственно перед сбоем.
если у вас ПОЛНАЯ модель восстановления, вы можете попробовать инструмент просмотра журналов (бесплатно Красные Ворота один)
в зависимости от активности и вашей модели безопасности вы также можете проверить журнал безопасности Windows, чтобы узнать, кто вошел в систему с привилегиями DDL.
журналы событий SQL также могут содержать информацию.Например, если вы включили флаг трассировки, регистрирующий ошибки «разрешений», вы сможете увидеть, когда он начался.Или человек, внесший изменение, мог сгенерировать другие исключения, которые регистрируются.
вы можете спросить тех, у кого есть права.Это могла быть настоящая ошибка (например, думали, что они в разработке)
Другие советы
Следующий запрос дал мне время создания и последнего изменения.
SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbTableInQuestion]') AND type in (N'U')
Вы сможете найти создание таблицы в Журнал транзакций. Я никогда не использовал здесь какие-либо инструменты просмотра и не могу сказать вам, как выполнить поиск в прошлом, но все происходит в транзакции, поэтому это необходимо протоколировать - даже системные таблицы...