Мартин уже указал на лучшую дорогу - трассу административного аудита, которая обычно включена (если она явно не отключена). Если вы не можете найти информацию в трассировке администратора (была отключена или была переработана), вы можете получить информацию из резервных копий журнала. Поскольку это производственная БД, я предполагаю, что у вас есть регулярный цикл резервного копирования с периодическим полным резервным копированием и резервным копированием журнала. Вам потребуется восстановить базу данных на отдельном сервере примерно до времени происшествия, чтобы 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 (текущий идентификатор объекта представления в восстановленной базе данных). С идентификатором транзакции вы возвращаетесь и получаете информацию о начале транзакции:
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
пароль, мог это сделать.