web-dev-qa-db-fra.com

Erreur SSMS 2016 lors de l'importation de bacpac Azure SQL v12: clés principales sans mot de passe non prises en charge

J'ai fait cela des dizaines de fois, mais tout récemment, j'ai rencontré cette erreur. Voici les étapes que j'ai suivies pour arriver ici:

  1. Créer une copie de ma base de données Azure SQL v12 sur le même serveur que celui d'origine
  2. Exporter la version de copie (complètement inactive de l'interaction utilisateur) vers le stockage d'objets blob
  3. Téléchargez le fichier .bacpac du stockage d'objets blob sur mon lecteur local
  4. Dans SSMS (version d'octobre 2016), mon instance de serveur SQL local, cliquez avec le bouton droit de la souris sur Bases de données et choisissez "Importer l'application de données de niveau".
  5. Choisissez mon fichier bacpac récemment téléchargé et lancez l'importation

Cela ne prend que quelques secondes pour que ça bombe et j'obtiens l'erreur:

Error SQL72014: .Net SqlClient Data Provider: Msg 33161, Level 15, State 1, Line 1 Database master keys without password are not supported in this version of SQL Server
Error SQL72045: Script execution error. The executed script: CREATE MASTER KEY;

J'ai suivi le même processus pour la même base de données il y a un mois et demi. Tout fonctionnait-il bien? J'ai la version 14.0.61021.0 de SSDT installée - je ne suis pas sûre que cela compte ou non. J'utilise aussi SQL Server 2016 Developer Edition (v13.0.1722.0).

27
How 'bout a Fresca

OK, la façon dont j'ai résolu le problème était la suivante:

  1. Créez une copie de la base de données SQL Azure sur le même serveur que le serveur d'origine.
  2. Dans cette base de données, exécutez le script suivant: 

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  3. Suivez les étapes 2 à 5 du message d'origine.

Je n'ai pas vu de documentation à ce sujet, mais apparemment, lorsque vous créez une base de données SQL Azure, celle-ci crée une clé principale de base de données (DMK) sans mot de passe. Dans SQL Server 2016, cela n'est pas correct. Espérons que cela aide quelqu'un d'autre.

Remarque: je pouvais le faire, car je ne voulais que les données de la base de données d'origine pour actualiser ma copie de développement local. Je n'ai pas complètement étudié les implications de cela.

16
How 'bout a Fresca

J'ai eu le même problème. Après avoir parlé au support technique Azure, ils ont découvert que le problème était dû à la création d'une clé principale de base de données vierge pour chiffrer les informations d'identification de stockage pour l'audit (l'audit est un paramètre facultatif).

Notez que les paramètres d'audit de la base de données sont hérités des paramètres du serveur.

Quoi qu’il en soit, le travail autour duquel ils sont arrivés était le suivant:

  1. Désactiver l'audit sur le serveur (ou la base de données)
  2. Supprimez la clé principale de la base de données avec la commande DROP MASTER KEY.

Ensuite, l'exportation fonctionne comme prévu. Espérons que Azure corrigera bientôt ce problème afin que l'audit et l'exportation puissent fonctionner ensemble.

Mise à jour du 21 mars 2017 Meilleure solution de contournement par les États membres 

Comme le correctif prendra un certain temps à déployer, ils ont également suggéré un solution alternative, qui ne nécessitera aucune étape supplémentaire (comme désactiver l’audit ou les étapes du blog) de votre côté pour éviter ce problème. Une fois l'audit activé, veuillez mettre à jour le fichier maître clé et définissez le mot de passe. Définition d'un mot de passe pour le maître existant clé permettra d'atténuer le problème. En outre, la définition du mot de passe ne sera pas l’audit d’impact et cela continuera à fonctionner. La syntaxe pour ajouter le Le mot de passe est le suivant:

-- execute in the user database
ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = ‘##############’;

Le lien contient également un script PowerShell que vous pouvez utiliser pour supprimer l’instruction SQL incriminée du fichier .bacpac.

37
Marvin Rounce

Tu dois: 

  • retirer l'objet clé principale du bacpac 
  • retirer l'objet d'identification du bacpac

Il y a ce script publié sur Microsoft blog , lancez-le et fera tout ce qui est décrit ci-dessus. 

C:\PS> .\RemoveMasterKey.ps1  -bacpacPath "C:\BacPacs\Test.bacpac
10
Adrian Onu

Correction d'un bacpac corrompu créé en supprimant la clé principale.

La suggestion d’exécution du script RemoveMasterKey a également créé un fichier bacpac corrompu dans mon cas en insérant  dans le fichier model.xml à plusieurs endroits.

Il existe un moyen de modifier le bacpac en extrayant les fichiers. Suppression des caractères incriminés dans le fichier model.xml, puis génération d'une nouvelle somme de contrôle pour le fichier Origin.xml.

une fois cette opération effectuée, la sauvegarde des fichiers avec l'extension .bacpac vous permet d'importer le backpac.

Correctif trouvé à: http://inworksllc.com/editing-sql-database-Azure-bacpac-files/

générateur de sommes de contrôle: https://github.com/gertd/dac/tree/master/drop/debug

Étapes fournies:

1) Mettez à jour le fichier Zip avec le fichier model.xml modifié.

2) Renommez le fichier Zip avec l'extension bacpac 

3) Exécutez dacchksum.exe /i:database.bacpac (où database.bacpac est le nom du fichier bacpac) 

4) Mettez à jour Origin.xml dans le fichier bacpac avec la nouvelle valeur fournie par dacchksum.exe. 

0
Just_a_guy