Eine Tabelle in der Produktionsdatenbank ist "auf mysteriöse Weise" verschwunden.
Kennt jemand eine Möglichkeit zu diagnostizieren, was zum Teufel damit passiert ist? Und wer hat es getan?
Bearbeiten 1: Dies ist eine interne App mit schwacher Sicherheit. Alle Apps (außer meinen natürlich ;-) sind anfällig für SQL Injection, aber unsere Benutzer sind sehr unkompliziert und der Tabellenname war nicht sofort offensichtlich, daher glaube ich nicht, dass es sich um eine SQL Injection handelte (nicht) dass es darauf ankommt ... irgendwie über den Rahmen der Frage hinaus).
Edit 2: Auch nur ein FYI; Diese Tabelle gibt es schon seit langer Zeit, daher wurde sie bei einer Wiederherstellung nicht "rückgängig gemacht".
security
sql-server
John MacIntyre
quelle
quelle
Antworten:
Möglicherweise können Sie die Informationen mithilfe der Funktion undokumentiert :: fn_dblog, die Protokolldatensätze interpretiert, aus dem Protokoll abrufen. Ich bin gerade dabei, eine Disaster Recovery-Klasse zu unterrichten, aber wenn Sie 2-3 Stunden warten können, werde ich veröffentlichen, wie es für Sie geht - sollte auch in der Lage sein, den Benutzernamen zu erhalten, ohne Tools kaufen zu müssen ( Ich habe im Jahr 2000 eine Tonne im Protokoll herumgespielt, als ich eine Reihe des internen Protokollanalysecodes geschrieben habe, den DBCC CHECKDB im Jahr 2000 verwendet hat.
[Bearbeitet, um Anweisungen einzuschließen] Ok - Unterricht beendet und ich habe einen Blog-Beitrag erstellt, um Ihnen zu zeigen, wie Sie das Protokoll in den Jahren 2000, 2005 und 2008 analysieren können, um herauszufinden, wann die Tabelle gelöscht wurde und wer es getan hat. Überprüfen Sie meinen Blog-Beitrag unter Herausfinden, wer eine Tabelle mithilfe des Transaktionsprotokolls gelöscht hat . [/bearbeiten]
Haben Sie noch das Transaktionsprotokoll? In welchem Wiederherstellungsmodell befindet sich die Datenbank? Wenn es EINFACH ist, tun Sie nichts, was einen Kontrollpunkt verursachen würde. Wenn es FULL oder BULK_LOGGED ist, führen Sie keine Protokollsicherung durch. Beides führt dazu, dass das Protokoll abgeschnitten wird und Sie möglicherweise nicht mehr in das Protokoll zurückblicken können, obwohl ich dem Blog-Beitrag ein Trace-Flag hinzugefügt habe, das Ihnen auch dabei helfen kann.
Vielen Dank
PS Eine Möglichkeit, das Löschen von Tabellen im Jahr 2000 zu verhindern, ohne die Sicherheit zu erhöhen, besteht darin, eine einfache schemaboundierte Ansicht darauf zu erstellen. DROP TABLE schlägt fehl, wenn die Ansicht vorhanden ist.
quelle
Vielleicht war es Little Bobby Tables ...
quelle
Möglicherweise können Sie diese Informationen aus den SQL-Protokollen wiederherstellen.
quelle
Wenn das Standard-Ablaufverfolgungsprotokoll ausgeführt wird, werden alle Informationen im Protokollordner gespeichert. Sie sollten sehen können, wann das Objekt (Tabelle) gelöscht wurde und über welche Verbindung dies geschehen ist. Diese Art von Erlaubnis sollte jedoch ohnehin nur DBAs erteilt werden
quelle
Ich versuche, eine beschädigte MSDB zu reparieren. Entschuldigung, ich kann nicht näher darauf eingehen.
Führen Sie diese aus, und es sollte eine allgemeine Vorstellung davon geben, wo Sie suchen müssen, vorausgesetzt, Ihre Standardablaufverfolgung ist aktiviert.
SELECT * FROM :: fn_trace_getinfo (Standard)
SELECT t.EventID, t.ColumnID, e.name als Event_Description, c.name als Column_Description FROM :: fn_trace_geteventinfo (1) t JOIN sys.trace_events e ON t.eventID = e.trace_event_id JOIN sys.trace_columnid c ON = c.trace_column_id
quelle
Die einzige Möglichkeit, diese Informationen herauszufinden, besteht darin, das Transaktionsprotokoll zu lesen (vorausgesetzt, es befindet sich im vollständigen Wiederherstellungsmodus).
Zwei Möglichkeiten, dies zu tun:
quelle
In SSMS können Sie versuchen, mit der rechten Maustaste auf das dB zu klicken und durch Berichte -> Standardberichte -> Verlauf der Schemaänderungen zu navigieren.
Klicken Sie mit der rechten Maustaste auf den Bericht und "SaveAs" Excel und suchen Sie Ihren Objektnamen.
Sie können nichts erhalten, wenn der Server mehr als fünf Mal nach dem Löschen des Objekts neu gestartet wurde.
quelle