Подтвердить что ты не робот

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

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

  • Создайте копию базы данных Azure SQL v12 на том же сервере, что и исходный
  • Экспортировать копию-версию (полностью неактивную с пользовательского взаимодействия) в хранилище памяти.
  • Загрузите файл .bacpac из хранилища blob на локальный диск.
  • В SSMS (выпуск октябрь 2016 года) мой локальный экземпляр сервера sql, щелкните правой кнопкой мыши Базы данных и выберите "Импортировать уровень данных"
  • Выберите мой недавно загруженный файл 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 (v13.0.1722.0).

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

В любом случае, работа вокруг них возникла:

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

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

Обновление 21 марта 2017 года Улучшение работы от MS

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

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

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

Ответ 3

Вам необходимо:

  • удалить основной объект ключа из bacpac
  • удалить объект учетных данных из bacpac

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

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

Ответ 4

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';