2016-11-13 15 views
25

Zrobiłem to dziesiątki razy, ale niedawno wpadłem na ten błąd. Oto kroki, jakie przeszły przez uzyskać tutaj:Błąd SSMS 2016 Importowanie skryptu Azure SQL v12 bacpac: klucze główne bez hasła nie są obsługiwane

  1. Utwórz kopię mojego Azure bazy danych SQL v12 na tym samym serwerze, co oryginalny
  2. wyeksportować kopiowaniem wersję (całkowicie nieaktywny od interakcji użytkownika) blob przechowywania
  3. Pobierz plik .bacpac z pamięci blob do mojego dysku lokalnego
  4. W SSMS (październik 2016 release) mojego lokalnego serwera SQL instancji, kliknij prawym przyciskiem i wybierz „Bazy danych Tier importować dane aplikacji”
  5. dobierać niedawno pobrać plik bacpac i rozpocząć importowanie

To zajmuje tylko kilka sekund na to, aby bombardować się i pojawia się błąd:

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; 

Śledziłem ten sam proces w tej samej bazie danych 1,5 miesiąca temu każdy wszystko działało w porządku ... Czy ktoś inny doświadczający tego? Mam zainstalowaną wersję SSDT 14.0.61021.0 - nie jestem pewien, czy to ma znaczenie, czy nie. Używam również wersji SQL Server 2016 Developer Edition (v13.0.1722.0).

Odpowiedz

14

Dobra droga skończyło się na rozwiązaniu tego problemu było wykonać następujące czynności:

  1. Utwórz kopię bazy danych SQL Azure na tym samym serwerze, co oryginalny
  2. w tej bazie danych uruchom następujące scenariusz:

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here]; 
    
  3. Wykonaj czynności 2-5 w oryginalnym poście

Nie widziałem dokumentacji na ten temat, ale najwyraźniej podczas tworzenia bazy danych SQL Azure tworzy klucz główny bazy danych (DMK) bez hasła, aw SQL Server 2016 to nie jest w porządku. Mam nadzieję, że to pomoże komuś innemu.

Uwaga: Udało mi się to zrobić, ponieważ chciałem tylko, aby dane z oryginalnej bazy danych odświeżyły moją kopię lokalną - nie w pełni zbadałem jej skutków.

+0

Aby wyjaśnić, czy krok 1 mówi, że powinienem utworzyć kopię bazy danych Azure SQL * na serwerze Azure SQL * lub na moim lokalnym on-prem serwerze SQL? – Dai

+0

Kopię należy wykonać na serwerze Azure SQL Server. Jak tylko ta kopia zostanie wyeksportowana do magazynu BLOB, możesz usunąć kopię DB ... po prostu upewnij się, że skasowałeś kopię DB, a nie oryginał! –

+0

UTWÓRZ MASTER KLUCZOWE SZYFROWANIE PRZEZ HASŁO = "hasło" –

32

Miałem ten sam problem. Po rozmowie z obsługą platformy Azure odkryli, że problem został spowodowany, ponieważ został utworzony pusty klucz główny bazy danych w celu zaszyfrowania poświadczeń magazynu dla audytu (inspekcja to ustawienie opcjonalne).

Należy pamiętać, że ustawienia inspekcji bazy danych są dziedziczone z ustawień serwera.

Zresztą praca wokół wpadli było:

  1. Wyłącz audyt na serwerze (lub bazy)
  2. upuść klucz główny bazy danych za pomocą komendy DROP MASTER KEY.

Następnie eksport działa zgodnie z oczekiwaniami. Mam nadzieję, że Azure wkrótce rozwiąże ten problem, aby audyt i eksport mogły współpracować.

Aktualizacja 21 marca 2017 Better work-around From MS

As the fix will take some time to be deployed, they also suggested an alternative solution, which will not require any additional steps (like disabling auditing or the steps form the blog) on your side to avoid this issue. After auditing is enabled, please update the master key and set the password. Setting a password for the existing master key will mitigate the issue. Also, setting the password will not impact auditing and it will keep working. The syntax to add the password is as follows:

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

Link posiada również skryptu PowerShell można użyć do usunięcia oświadczenie wykraczająca SQL z pliku .bacpac.

+0

Właśnie trafiliśmy w to. Czy masz głębszy wgląd w to, jakie mogą być inne implikacje polegające na upuszczeniu klucza głównego? – ChadT

+1

@ChadT tak, dostałem więcej informacji. Zaktualizowałem powyższą odpowiedź. –

+5

Post na blogu od MS ze szczegółami https://blogs.msdn.microsoft.com/azuresqlemea/2017/03/30/exported-database-from-azure-sql-failed-to-be-imported-to-azure-sql -lub-do-lokalnego-sql-server/ – GraemeMiller

6

Musisz:

  • usunąć klucza obiektu głównego z BacPac
  • usunięcia referencji obiektu z BacPac

Jest this script opublikowane na Microsoft blog, uruchom go, a zrobi wszystkie powyższe.

C:\PS> .\RemoveMasterKey.ps1 -bacpacPath "C:\BacPacs\Test.bacpac 
+2

To nie działało dla mnie, gdy próbowałem, skończyło się na stworzeniu uszkodzonego .bacpac, który był bezużyteczny. Nie jestem pewien dlaczego, ponieważ słyszałem, że działa on dla innych. –

+0

Skrypt generuje nowy poprawiony plik i nie modyfikuje oryginału. Zwróć uwagę, że ścieżka bacpac musi być pełną ścieżką, tak jak w przykładzie, i że w celu wyłączenia ustawień bezpieczeństwa, które blokują ten skrypt, może być konieczne wykonanie następujących poleceń z poziomu PowerShell: 'Set-ExecutionPolicy-Workout -ExecutionPolicy Bypass'. – Savage

-1
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'; 
+0

Należy określić, gdzie należy to zrobić – Savage

0

naprawić uszkodzony BacPac stworzony przez usunięcie klucza głównego.

Sugestia uruchomienia skryptu RemoveMasterKey, utworzyła również uszkodzony plik bacpac w moim przypadku poprzez wstawienie  ​​do pliku model.xml w wielu miejscach.

Jest na to sposób, aby edytować BacPac przez extractig plików, usuwanie znaków naruszające bezpieczeństwo w pliku model.xml a następnie wygenerowanie nowego sumy kontrolnej dla pliku Origin.xml

raz wykonanej Zipping pliki kopii zapasowej z rozszerzeniem .bacpac umożliwia importowanie backpac.

Fix znaleźć na http://inworksllc.com/editing-sql-database-azure-bacpac-files/

generatora kontrolna: https://github.com/gertd/dac/tree/master/drop/debug

kroki opisane:

1) uaktualnia zip ze zmodyfikowanym model.xml

2) zmienić nazwę plik zip z rozszerzeniem bacpac

3) Uruchom dacchksum.exe /i:database.bacpac (gdzie database.bacpac to nazwa pliku BacPac)

4) Aktualizacja Origin.xml w pliku BacPac z nową wartość podaną przez dacchksum.exe

Powiązane problemy