webentwicklung-frage-antwort-db.com.de

SSMS 2016-Fehler beim Importieren von Azure SQL v12 bacpac: Hauptschlüssel ohne Kennwort werden nicht unterstützt

Ich habe das Dutzende Male gemacht, aber kürzlich bin ich auf diesen Fehler gestoßen. Hier sind die Schritte, die ich durchlaufen habe, um hierher zu gelangen:

  1. Erstellen Sie eine Kopie meiner Azure SQL v12-Datenbank auf demselben Server wie das Original
  2. Exportieren Sie die Kopie-Version (vollständig von der Benutzerinteraktion deaktiviert) in den Blob-Speicher
  3. Laden Sie die .bacpac-Datei vom Blob-Speicher auf mein lokales Laufwerk herunter
  4. Klicken Sie in SSMS (Version vom Oktober 2016) für meine lokale SQL Server-Instanz mit der rechten Maustaste auf Datenbanken und wählen Sie "Import Data Tier Application" aus.
  5. Wählen Sie meine kürzlich heruntergeladene Bacac-Datei und starten Sie den Import

Es dauert nur ein paar Sekunden, bis es bombardiert wird und ich bekomme den Fehler:

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;

Ich habe den gleichen Prozess für die gleiche Datenbank vor 1,5 Monaten befolgt. Alles hat gut funktioniert. Ich habe SSDT-Version 14.0.61021.0 installiert - nicht sicher, ob das wichtig ist oder nicht. Ich führe auch SQL Server 2016 Developer Edition (v13.0.1722.0) aus.

27

Okay, die Art und Weise, wie ich dieses Problem gelöst habe, war folgende:

  1. Erstellen Sie eine Kopie der SQL Azure-Datenbank auf demselben Server wie das Original
  2. Führen Sie in dieser Datenbank das folgende Skript aus: 

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  3. Befolgen Sie die Schritte 2-5 im ursprünglichen Beitrag

Ich habe keine Dokumentation dazu gesehen, aber wenn Sie eine Azure SQL-Datenbank erstellen, wird anscheinend ein Datenbankhauptschlüssel (DMK) ohne Kennwort erstellt. In SQL Server 2016 ist dies nicht in Ordnung. Hoffentlich hilft das jemand anderen.

Hinweis: Ich konnte dies tun, da ich nur wollte, dass die Daten aus der ursprünglichen Datenbank meine lokale Entwicklungskopie auffrischten. Ich habe die Auswirkungen dieses Problems noch nicht vollständig untersucht.

16

Ich hatte das gleiche Problem. Nachdem sie mit dem Azure-Support gesprochen hatten, stellten sie fest, dass das Problem verursacht wurde, weil ein leerer Datenbankhauptschlüssel erstellt wurde, um die Speicherberechtigungsnachweise für die Überwachung zu verschlüsseln (Überwachung ist eine optionale Einstellung).

Beachten Sie, dass die Einstellungen für die Datenbanküberwachung von den Servereinstellungen übernommen werden.

Wie auch immer, die Arbeit, die sie hatten, war:

  1. Überwachung auf dem Server (oder der Datenbank) deaktivieren
  2. Löschen Sie den Datenbankhauptschlüssel mit dem Befehl DROP MASTER KEY.

Dann funktioniert der Export wie erwartet. Hoffentlich wird Azure dieses Problem bald beheben, sodass Überwachung und Export zusammenarbeiten können.

Update 21. März 2017 Bessere Umgehung von MS 

Da das Update einige Zeit in Anspruch nehmen kann, wurde auch ein .__ vorgeschlagen. Alternativlösung, für die keine zusätzlichen Schritte erforderlich sind (wie das Deaktivieren der Überwachung oder die Schritte aus dem Blog) auf Ihrer Seite zu vermeiden Sie dieses Problem. Nachdem die Überwachung aktiviert ist, aktualisieren Sie bitte den Master Taste und stellen Sie das Passwort ein. Festlegen eines Passworts für den vorhandenen Master Schlüssel wird das Problem mildern. Das Festlegen des Passworts wird auch nicht Auswirkungen Auditing und es wird weiter funktionieren. Die Syntax zum Hinzufügen von Passwort lautet wie folgt:

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

Der Link enthält auch ein PowerShell-Skript, mit dem Sie die fehlerhafte SQL-Anweisung aus der .bacpac-Datei entfernen können.

37
Marvin Rounce

Du musst: 

  • entfernen Sie das Hauptschlüsselobjekt aus dem Bacpac 
  • entfernen Sie das Berechtigungsobjekt aus dem bacpac

Es gibt dieses Skript , das auf Microsoft blog veröffentlicht ist, führen Sie es aus und werden alle oben genannten Schritte ausführen. 

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

Reparieren Sie das beschädigte bacpac, indem Sie den Hauptschlüssel entfernen.

Die Empfehlung, das Skript RemoveMasterKey auszuführen, hat in meinem Fall auch eine beschädigte bacpac-Datei erstellt, indem Sie  an mehreren Stellen in die model.xml-Datei einfügt.

Es gibt eine Möglichkeit, das bacpac durch Extrahieren der Dateien zu bearbeiten. Entfernen Sie die störenden Zeichen in der Datei model.xml und generieren Sie dann eine neue Prüfsumme für die Datei Origin.xml

wenn Sie fertig sind, können Sie die Dateien mit der Erweiterung .bacpac sichern, um den Backpac zu importieren.

Fix gefunden unter: http://inworksllc.com/editing-sql-database-Azure-bacpac-files/

prüfsummengenerator: https://github.com/gertd/dac/tree/master/drop/debug

Schritte zur Verfügung gestellt:

1) Aktualisieren Sie die Zip-Datei mit der modifizierten model.xml

2) Benennen Sie die ZIP-Datei mit der Erweiterung bacpac um 

3) Führen Sie dacchksum.exe /i:database.bacpac aus (wobei database.bacpac der Name der bacpac-Datei ist). 

4) Aktualisieren Sie Origin.xml in der bacpac-Datei mit dem neuen Wert, der von dacchksum.exe bereitgestellt wird 

0
Just_a_guy