Какая информация аудита сохраняется на сервере sql при выполнении операций CREATE TABLE или ALTER TABLE?

StackOverflow https://stackoverflow.com/questions/984558

  •  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')

Вы сможете найти создание таблицы в Журнал транзакций. Я никогда не использовал здесь какие-либо инструменты просмотра и не могу сказать вам, как выполнить поиск в прошлом, но все происходит в транзакции, поэтому это необходимо протоколировать - даже системные таблицы...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top