it-swarm.com.de

Wie kann ich eine Master-Datenbank aus ihrer Bak-Datei wiederherstellen?

Während eines Penetrationstests habe ich mehrere .bak-Dateien für eine MSSQL-Datenbank gefunden. Ich möchte sie alle wiederherstellen. In einem Windows VM Ich habe SQL Server 2017 installiert. Zum Wiederherstellen der Master-Datenbank habe ich den Server in den Einzelbenutzermodus versetzt und versucht, die Datenbank wie folgt wiederherzustellen (auch über SSMS):

RESTORE DATABASE master
FROM DISK = 'C:\Foo\<path>\master.bak'
WITH MOVE 'master' TO 'C:\Foo\master.mdf',
MOVE 'master_log' TO 'C:\Foo\master_log.ldf',
REPLACE
GO

Dies gab mir einen Fehler wie:

.. kann nicht wiederhergestellt werden, da es von einer anderen Version des Servers (13.00.4435) als dieser Server (14 ...) erstellt wurde.

Anschließend habe ich MSSQL 2016 mit Service Pack 1 heruntergeladen, indem ich "Visual Studio Dev Essentials" auf my.visualstudio.com abonniert habe. Jetzt habe ich den Fehler bekommen:

.. kann nicht wiederhergestellt werden, da es von einer anderen Version des Servers (13.00.4435) als dieser Server (13.00.4001) erstellt wurde.

Also musste ich jetzt aktualisieren. Ich habe MSSQL 2016 Service Pack 2 heruntergeladen, was mir den Fehler gab:

.. kann nicht wiederhergestellt werden, da es von einer anderen Version des Servers (13.00.4435) als dieser Server (13.00.5026) erstellt wurde.

Ich brauche also wirklich den genauen Patch. Ich kann jedoch keine Liste der Patches mit den entsprechenden Serverversionen finden. Hat jemand eine Idee, wie man den richtigen Patch findet?

Wenn ich nur die .bak-Datei in ihre .mdf- und .ldf-Dateien extrahieren könnte, wäre das genug. Ich habe eine Reihe von Tools zum Wiederherstellen von MSSQL .bak-Dateien gefunden, möchte aber, dass alle eine Verbindung zu einer Datenbank herstellen (um eine einfache Wiederherstellung durchzuführen). Ich würde mich sehr freuen, wenn ich entweder die richtige SQL Server-Version erhalten oder die .bak-Datei extrahieren könnte.

6
Graa

Die Master-Datenbank unterscheidet sich von anderen Datenbanken. Es ist eine Systemdatenbank, in der SQL Server interne Objekte speichert. Das einzige Mal, dass Sie es normalerweise wiederherstellen würden, ist, wenn Sie einen Server von den Toten zurückbringen - normalerweise möchten Sie den Master nicht von einer Datenbank in eine andere wiederherstellen.

Wenn Sie in Ihrem Szenario nur neugierig auf den Inhalt der Datenbank sind, stellen Sie den Master mit einem anderen Datenbanknamen wie folgt wieder her:

RESTORE DATABASE master_copy
FROM DISK = 'C:\Foo\<path>\master.bak'
WITH MOVE 'master' TO 'C:\Foo\master_copy.mdf',
MOVE 'master_log' TO 'C:\Foo\master_copy_log.ldf',
GO

Nach Abschluss der Wiederherstellung können Sie Objekte in der Datenbank master_copy abfragen.

14
Brent Ozar

Da ich nicht als Kommentar antworten kann, ist es hier wie gewohnt:

Informationen zu Ihrem Problem mit den SQL Server-Versionen finden Sie unter https://support.Microsoft.com/en-us/help/3177312/sql-server-2016-build-versions

Dort können Sie sehen, dass Ihre Sicherungsdatei von SQL Server 2016 SP1 CU3 stammt. Microsoft verwaltet diese Listen für alle Versionen von MSSQL bis zu SQL 7.0, denke ich.

1
Marcel Klein