Martin wskazał już na najlepszą ścieżkę - ślad audytu administracyjnego, który jest zwykle włączony (chyba że został wyraźnie wyłączony). Jeśli nie możesz znaleźć informacji w śladzie administratora (został wyłączony lub został ponownie przetworzony), możesz odzyskać informacje z kopii zapasowych dziennika. Ponieważ jest to produkcyjna baza danych, zakładam, że masz regularny cykl tworzenia kopii zapasowych, z okresowymi pełnymi kopiami zapasowymi i kopiami zapasowymi dziennika. Konieczne będzie przywrócenie bazy danych na osobnym serwerze mniej więcej w czasie zdarzenia, tak aby DDL znajdował się w bieżącym przywróconym dzienniku. Następnie jest prosta kwestia używania fn_dblog()
i sprawdzania dziennika.
Jednym ze sposobów jest przejście przez operacje rozpoczynania transakcji:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where Operation = 'LOP_BEGIN_XACT';
Jeżeli ALTER VIEW
został wydany w ramach samodzielnej transakcji (tj. Nie jest otoczonyBEGIN TRANSACTION
/ COMMIT
), rozpocznie się transakcja o nazwie CreatProc transaction
. Poszukaj go, a [Transaction SID]
jest to identyfikator SID logowania, który chcesz.
Inną możliwością jest poszukiwanie transakcji, która uzyskała SCH_M w wybranym widoku:
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
Zauważ, że jeśli widok został zmieniony przez DROP, a następnie CREATE, identyfikator obiektu prawdopodobnie został zmieniony, ale przynajmniej dostaniesz transakcję, która ostatnio wykonała CREATE (bieżący identyfikator obiektu widoku w przywróconej bazie danych). Z identyfikatorem transakcji wróć i pobierz informacje o rozpoczęciu transakcji:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where [Transaction ID] = '...'
and Operation = 'LOP_BEGIN_XACT';
[Transakcja SID] jest znowu twoim facetem. Służy SUSER_SNAME
do pobierania nazwy logowania z identyfikatora SID logowania. Jeśli SID to 0x01, oznacza to, że login był sa
, co oznacza, że każda osoba, która zna sa
hasło, mogła to zrobić.