Мартін уже вказав на кращий проспект, на якому зазвичай знаходиться слід адміністративного аудиту (якщо він явно не був відключений). Якщо ви не можете знайти інформацію в трасі адміністратора (було вимкнено або вона була перероблена), ви можете отримати інформацію з резервних копій журналу. Оскільки це виробнича БД, я припускаю, що у вас є регулярний цикл резервного копіювання, з періодичними повними резервними копіями та резервними копіями журналу. Вам потрібно буде відновити на окремому сервері базу даних приблизно до часу інциденту, щоб DDL знаходився в поточному відновленому журналі. Тоді просте питання використання fn_dblog()
та огляду журналу.
Одним із способів є здійснення операцій, починаючи операції:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where Operation = 'LOP_BEGIN_XACT';
Якщо ALTER VIEW
випуск був виданий в окрему транзакцію (тобто не оточений BEGIN TRANSACTION
/ COMMIT
), він розпочне транзакцію з назвою CreatProc transaction
. Шукайте її, і [Transaction SID]
SID - це вхід, який ви хочете.
Інша можливість полягає у пошуку транзакції, яка придбала SCH_M у потрібному представленні:
select [Lock Information], *
from fn_dblog(null, null)
where [Lock Information] like '%' + cast(object_id('...') as varchar(10))+'%'
and [Lock Information] like '%LOCK_SCH_M%'
go
Зауважте, що якщо представлення було змінено DROP, а потім CREATE, ідентифікатор об'єкта, ймовірно, був змінений, але принаймні ви отримаєте транзакцію, яка востаннє робила CREATE (поточний ідентифікатор об'єкта подання у відновленому db). Ідентифікатор транзакції повертається назад та отримує інформацію про початок транзакції:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where [Transaction ID] = '...'
and Operation = 'LOP_BEGIN_XACT';
[SID транзакції] - це знову ваш хлопець. Використовуйте SUSER_SNAME
для отримання імені входу з SID входу. Якщо SID 0x01, це означає, що вхід був sa
, це означає, що будь-яка особа, яка знає, sa
пароль міг це зробити.