web-dev-qa-db-fra.com

Comment puis-je restaurer une base de données master à partir de son fichier bak?

Lors d'un test de pénétration, j'ai trouvé plusieurs fichiers .bak pour une base de données MSSQL. Je veux tous les restaurer. Dans un Windows VM j'ai installé SQL Server 2017. Pour restaurer la base de données master, j'ai mis le serveur en mode mono-utilisateur et essayé de restaurer la base de données comme suit (également essayé la même via 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

Cela m'a donné une erreur comme:

.. ne peut pas être restauré car il a été créé par une version différente du serveur (13.00.4435) que ce serveur (14 ...).

J'ai ensuite téléchargé MSSQL 2016 avec le Service Pack 1 en m'abonnant à "Visual Studio Dev Essentials" sur my.visualstudio.com. Maintenant, j'ai eu l'erreur:

.. ne peut pas être restauré car il a été créé par une version différente du serveur (13.00.4435) que ce serveur (13.00.4001).

Alors maintenant, je devais mettre à jour. J'ai téléchargé le service pack 2 de MSSQL 2016, qui m'a donné l'erreur:

.. ne peut pas être restauré car il a été créé par une version différente du serveur (13.00.4435) que ce serveur (13.00.5026).

Il me semble donc vraiment avoir besoin du correctif exact. Cependant, je ne trouve pas de liste de correctifs avec les versions de serveur correspondantes. Quelqu'un at-il une idée sur la façon de trouver le bon patch?

Si je pouvais simplement extraire le fichier .bak dans ses fichiers .mdf et .ldf, cela suffirait. J'ai trouvé un tas d'outils pour restaurer les fichiers .bak MSSQL, mais je veux qu'ils veulent tous se connecter à une base de données (pour faire une restauration simple). Je serais très heureux si je pouvais obtenir la bonne version de SQL Server ou extraire le fichier .bak.

6
Graa

La base de données master est spéciale, différente des autres bases de données. Il s'agit d'une base de données système dans laquelle SQL Server stocke des objets internes. La seule fois où vous le restaureriez normalement, c'est si vous ramenez un serveur d'entre les morts - vous ne voudriez généralement pas restaurer le maître d'une base de données à une autre.

Dans votre scénario, lorsque vous êtes simplement curieux de connaître le contenu de la base de données, restaurez le maître avec un nom de base de données différent, comme ceci:

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

Ensuite, une fois la restauration terminée, vous pouvez interroger des objets dans la base de données master_copy.

14
Brent Ozar

Comme je ne peux pas répondre comme un commentaire, le voici comme normal:

Pour votre problème avec les versions de SQL-Server, consultez https://support.Microsoft.com/en-us/help/3177312/sql-server-2016-build-versions

Là, vous pouvez voir que votre fichier de sauvegarde provient de SQL Server 2016 SP1 CU3. Microsoft maintient ces listes pour toutes les versions de MSSQL jusqu'à SQL 7.0 je pense.

1
Marcel Klein