it-swarm.com.ru

Ошибка SSMS 2016 при импорте Azure SQL v12 bacpac: мастер-ключи без пароля не поддерживаются

Я делал это десятки раз, но совсем недавно столкнулся с этой ошибкой. Вот шаги, которые я прошел, чтобы добраться сюда:

  1. Создайте копию моей базы данных Azure SQL v12 на том же сервере, что и исходный.
  2. Экспортируйте версию копии (полностью неактивную от взаимодействия с пользователем) в хранилище BLOB-объектов.
  3. Загрузите файл .bacpac из хранилища BLOB-объектов на мой локальный диск.
  4. В SSMS (выпуск за октябрь 2016 г.) мой экземпляр локального сервера sql щелкните правой кнопкой мыши Базы данных и выберите «Импортировать приложение уровня данных».
  5. Выберите мой недавно загруженный BACPAC-файл и начните импорт

Это займет всего несколько секунд, чтобы бомбить его, и я получаю ошибку:

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;

Я следовал тому же процессу для той же базы данных 1,5 месяца назад, все работало нормально ... Кто-нибудь еще испытывает это ??? У меня установлена ​​версия SSDT 14.0.61021.0 - не уверен, имеет ли это значение. Я также использую SQL Server 2016 Developer Edition (версия 13.0.1722.0).

27
How 'bout a Fresca

Хорошо, я решил эту проблему следующим образом:

  1. Создайте копию базы данных SQL Azure на том же сервере, что и исходный
  2. В этой базе данных запустите следующий скрипт: 

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  3. Выполните шаги 2-5 в оригинальном сообщении

Я не видел документации по этому вопросу, но, очевидно, когда вы создаете базу данных SQL Azure, она создает главный ключ базы данных (DMK) без пароля, а в SQL Server 2016 это не так. Надеюсь, это поможет кому-то еще.

Примечание. Я смог сделать это, поскольку хотел, чтобы данные из исходной базы данных обновляли только мою локальную копию для разработки - я не до конца исследовал последствия этого.

16
How 'bout a Fresca

У меня такая же проблема. После разговора со службой поддержки Azure они обнаружили, что проблема была вызвана тем, что для шифрования учетных данных хранилища для аудита создается пустой главный ключ базы данных (аудит является необязательным параметром).

Обратите внимание, что настройки аудита базы данных наследуются от настроек сервера.

Так или иначе, работа вокруг, которую они придумали, была:

  1. Отключить аудит на сервере (или в базе данных)
  2. Удалите главный ключ базы данных с помощью команды DROP MASTER KEY.

Тогда экспорт работает как положено. Надеемся, что Azure скоро исправит эту проблему, чтобы аудит и экспорт могли работать вместе.

Обновление 21 марта 2017 г. Лучшее решение от MS 

Поскольку исправление займет некоторое время, они также предложили альтернативное решение, которое не потребует каких-либо дополнительных шагов (например, отключение аудита или шаги из блога) на вашей стороне избежать этой проблемы. После включения аудита обновите мастер ключ и установить пароль. Установка пароля для существующего мастера ключ смягчит проблему. Также установка пароля не будет аудит воздействия, и он будет продолжать работать. Синтаксис для добавления пароль выглядит следующим образом:

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

Ссылка также содержит сценарий PowerShell, который можно использовать для удаления оскорбительного оператора SQL из файла .bacpac.

37
Marvin Rounce

Вам нужно: 

  • удалить объект главного ключа из BACPAC 
  • удалить учетные данные из BACPAC

Существует этот скрипт опубликован в Microsoft блоге , запустите его и сделайте все вышеперечисленное. 

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

Исправить поврежденный bacpac, созданный удалением мастер-ключа.

Sugestion для запуска сценария RemoveMasterKey, в моем случае также создал поврежденный bacpac-файл, вставив в файл model.xml несколько мест.

Существует способ отредактировать BACPAC, извлекая файлы, удаляя символы, вызывающие помехи, в файле model.xml, а затем генерируя новую контрольную сумму для файла Origin.xml.

после этого архивирование файлов с расширением .bacpac позволяет импортировать backpac.

Исправление найдено по адресу: http://inworksllc.com/editing-sql-database-Azure-bacpac-files/

генератор контрольной суммы: https://github.com/gertd/dac/tree/master/drop/debug

Шаги при условии:

1) Обновите Zip-файл с помощью модифицированного model.xml

2) Переименуйте Zip-файл с расширением bacpac. 

3) Запустите dacchksum.exe /i:database.bacpac (где database.bacpac - это имя файла bacpac). 

4) Обновите Origin.xml в файле bacpac новым значением, предоставленным dacchksum.exe. 

0
Just_a_guy