Wczoraj stało się coś złego.
Widok utworzony jakiś czas temu został zmodyfikowany przez kogoś, kto ostatecznie złamał raporty. Niestety. ktoś (świadomie lub nieświadomie) dokonał tej modyfikacji w bazie danych PRODUKCJA.
Moje pytanie: Czy istnieje sposób (skrypt / oprogramowanie / freeware itp.), Dzięki któremu możemy dowiedzieć się, kto (nazwa użytkownika) dokonał tej modyfikacji, tak że mogę odwołać dostęp do produkcyjnej bazy danych dla tego użytkownika.
Jeśli moje pytanie jest niejasne, proszę o komentarz.
źródło
Object:Created
zdarzenie, ponieważ widok został upuszczony i utworzony, a nie zmieniony. Nie wiesz, co masz na myśli mówiąc, że nie wykonujesz na serwerze? Oczywiście musisz być podłączony do właściwej instancji, ale nie ma znaczenia, skąd pochodzi połączenie, o ile masz uprawnienia.SELECT path FROM sys.traces where is_default=1
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:
Jeżeli
ALTER VIEW
został wydany w ramach samodzielnej transakcji (tj. Nie jest otoczonyBEGIN TRANSACTION
/COMMIT
), rozpocznie się transakcja o nazwieCreatProc 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:
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:
[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 znasa
hasło, mogła to zrobić.źródło
Nie, chyba że zalogowałeś go za pomocą wyzwalacza DDL lub podobnego
Chcesz sprawdzić, kto ma uprawnienia ALTER do tej bazy danych lub członkostwo w roli sysadmin / db_owner / ddl_admin. Byłoby to lepsze jako przegląd ogólny niż polowanie na czarownice. Prawdopodobnie są też inne osoby, które mają prawo dokonywać niezatwierdzonych i nieautoryzowanych zmian
źródło
Jeśli jeszcze tego nie zrobiłeś, możesz zajrzeć do raportu Historia zmian schematu dostępnego w SQL Server Management Studio. Wygląda na to, że SQL Server domyślnie rejestruje zmiany ( domyślny ślad ) i powinieneś móc przeglądać te dane za pomocą tego raportu. Jedyną niefortunną rzeczą jest to, że te pliki śledzenia są automatycznie usuwane / zwijane w miarę upływu czasu, więc dane mogą już zniknąć. Powodzenia!
źródło