Etwas Schlimmes ist gestern passiert.
Eine Ansicht, die vor einiger Zeit erstellt wurde, wurde von jemandem geändert, der schließlich die Berichte gebrochen hat. Unglücklicherweise. Jemand (wissentlich oder unwissentlich) hat diese Änderung in der PRODUCTION-Datenbank vorgenommen.
Meine Frage: Gibt es eine Möglichkeit (Skript / Software / Freeware usw.), durch die wir erfahren können, wer (Benutzername) diese Änderung vorgenommen hat, so dass ich dem Benutzer den Zugriff auf die Produktionsdatenbank entziehen kann?
Wenn meine Frage unklar ist, kommentieren Sie bitte.
quelle
Object:Created
Ereignis zu behandeln, sofern die Ansicht gelöscht und erstellt wurde, anstatt sie zu ändern. Sie sind sich nicht sicher, was Sie damit meinen, dass Sie nicht auf dem Server ausgeführt werden? Sie müssen natürlich mit der richtigen Instanz verbunden sein, aber es spielt keine Rolle, woher die Verbindung kommt, solange Sie über Berechtigungen verfügen.SELECT path FROM sys.traces where is_default=1
Martin wies bereits auf die beste Möglichkeit hin, nämlich die Ablaufverfolgung für Verwaltungsprüfungen, die normalerweise aktiviert ist (sofern sie nicht ausdrücklich deaktiviert wurde). Wenn Sie die Informationen im Administrator-Trace nicht finden können (deaktiviert oder wiederverwendet), können Sie sie aus den Protokollsicherungen abrufen. Da es sich um eine Produktionsdatenbank handelt, wird davon ausgegangen, dass Sie einen regelmäßigen Sicherungszyklus mit regelmäßigen vollständigen Sicherungen und Protokollsicherungen haben. Sie müssen die Datenbank auf einem separaten Server ungefähr zum Zeitpunkt des Vorfalls wiederherstellen, damit sich die DDL im aktuellen wiederhergestellten Protokoll befindet. Dann ist es eine einfache Sache,
fn_dblog()
das Protokoll zu verwenden und zu inspizieren.Eine Möglichkeit besteht darin, mit der Transaktion den Betrieb aufzunehmen:
Wenn das
ALTER VIEW
in einer eigenständigen Transaktion ausgegeben wurde (dh nicht vonBEGIN TRANSACTION
/ umgeben istCOMMIT
), startet es eine Transaktion mit dem NamenCreatProc transaction
. Suchen Sie danach, und das[Transaction SID]
ist die gewünschte Anmelde-SID.Eine andere Möglichkeit besteht darin, die Transaktion, die einen SCH_M erworben hat, in der gewünschten Sicht zu suchen:
Beachten Sie, dass, wenn die Ansicht durch DROP gefolgt von CREATE geändert wurde, die Objekt-ID wahrscheinlich geändert wurde, Sie jedoch zumindest die Transaktion erhalten, die zuletzt die CREATE-ID ausgeführt hat (die aktuelle Objekt-ID der Ansicht in der wiederhergestellten Datenbank). Mit der Transaktions-ID kehren Sie zurück und rufen die Informationen zum Beginn der Transaktion ab:
Die [Transaction SID] ist wieder Ihr Typ. Verwenden Sie
SUSER_SNAME
diese Option , um den Anmeldenamen von der Anmelde-SID abzurufen. Wenn die SID 0x01 ist, bedeutet dies, dass die Anmeldung durchgeführt wurde. Dies bedeutetsa
, dass jede Person, die dassa
Kennwort kennt, dies hätte tun können.quelle
Nein, es sei denn, Sie haben es über einen DDL-Trigger oder dergleichen protokolliert
Sie möchten sich ansehen, wer als ALTER-Rechte in dieser Datenbank oder als Mitglied der Rolle sysadmin / db_owner / ddl_admin fungiert. Dies wäre besser als eine allgemeine Überprüfung als eine Hexenjagd. Es gibt wahrscheinlich auch andere Personen mit dem Recht, nicht genehmigte und nicht autorisierte Änderungen vorzunehmen
quelle
Wenn Sie dies noch nicht getan haben, möchten Sie möglicherweise den in SQL Server Management Studio verfügbaren Bericht zum Schema-Änderungsverlauf auschecken. Offenbar protokolliert SQL Server Änderungen standardmäßig ( Standardablaufverfolgung ), und Sie sollten diese Daten über diesen Bericht anzeigen können. Leider werden diese Tracedateien im Laufe der Zeit automatisch gelöscht / verschoben, sodass die Daten möglicherweise bereits gelöscht sind. Viel Glück!
quelle