Martin ha già indicato la strada migliore, la traccia di controllo amministrativo che di solito è attiva (a meno che non sia stata esplicitamente disabilitata). Se non è possibile trovare le informazioni nella traccia di amministrazione (è stata disabilitata o è stata riciclata) è possibile recuperare le informazioni dai backup del registro. Poiché è un DB di produzione, suppongo che tu abbia un ciclo di backup regolare, con backup periodici completi e backup dei log. Sarà necessario ripristinare, su un server separato, il database al momento dell'incidente in modo che il DDL si trovi nel registro ripristinato corrente. Quindi è una semplice questione di utilizzo fn_dblog()
e controllo del registro.
Un modo è seguire le operazioni di inizio transazione:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where Operation = 'LOP_BEGIN_XACT';
Se è ALTER VIEW
stato emesso in una transazione autonoma (cioè non circondata da BEGIN TRANSACTION
/ COMMIT
), avvierà una transazione denominata CreatProc transaction
. Cercalo e [Transaction SID]
è il SID di accesso che desideri.
Un'altra possibilità è cercare la transazione che ha acquisito un SCH_M nella vista desiderata:
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
Si noti che se la vista è stata modificata da DROP seguita da CREATE, probabilmente è stato modificato l'id oggetto, ma almeno si otterrà la transazione che ha eseguito l'ultima volta CREATE (l'attuale ID oggetto della vista nel db ripristinato). Con l'ID transazione si torna indietro e si recuperano le informazioni di inizio transazione:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where [Transaction ID] = '...'
and Operation = 'LOP_BEGIN_XACT';
Il [Transaction SID] è, ancora una volta, il tuo ragazzo. Utilizzare SUSER_SNAME
per recuperare il nome di accesso dal SID di accesso. Se il SID è 0x01 significa che il login lo era sa
, il che significa che chiunque sapesse che la sa
password avrebbe potuto farlo.