web-dev-qa-db-ja.com

Azure SQL v12 bacpacのインポートSSMS 2016エラー:パスワードなしのマスターキーはサポートされていません

私はこれを何十回も行いましたが、最近このエラーに遭遇しました。ここに到達するまでに行った手順は次のとおりです。

  1. 元のサーバーと同じサーバーにAzure SQL v12データベースのコピーを作成する
  2. コピーバージョン(ユーザーの操作から完全に非アクティブ)をBLOBストレージにエクスポートします
  3. .bacpacファイルをBLOBストレージからローカルドライブにダウンロードします
  4. SSMS(2016年10月リリース)のローカル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(v13.0.1722.0)も実行しています。

29

さて、この問題を解決する方法は次のとおりです。

  1. 元のサーバーと同じサーバーにSQL Azureデータベースのコピーを作成します
  2. そのデータベースで次のスクリプトを実行します。

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  3. 元の投稿の手順2〜5を実行します

私はこれに関するドキュメントを見ていませんが、明らかにAzure SQLデータベースを作成するとパスワードなしでデータベースマスターキー(DMK)が作成され、SQL Server 2016ではこれは大丈夫ではありません。これが他の人の助けになることを願っています。

注:元のデータベースのデータがローカル開発コピーを更新することだけを望んでいたので、これを行うことができました-この影響を完全に調査していません。

16

同じ問題がありました。 Azureサポートに問い合わせたところ、監査用のストレージ資格情報を暗号化するために空のデータベースマスターキーが作成されたために問題が発生したことがわかりました(監査はオプションの設定です)。

データベース監査設定はサーバー設定から継承されることに注意してください。

とにかく、彼らが思いついた仕事は次のとおりでした:

  1. サーバー(またはデータベース)で監査を無効にする
  2. DROP MASTER KEYコマンドでデータベースマスターキーを削除します。

その後、エクスポートは期待どおりに機能します。監査とエクスポートが連携して動作するように、Azureがこの問題をすぐに修正することを願っています。

2017年3月21日更新 MSからのより良い回避策

修正の展開には時間がかかるため、この問題を回避するために、追加の手順(監査の無効化やブログからの手順など)を必要としない代替ソリューションも提案しました。監査を有効にしたら、マスターキーを更新してパスワードを設定してください。既存のマスターキーにパスワードを設定すると、問題が軽減されます。また、パスワードの設定は監査に影響せず、機能し続けます。パスワードを追加する構文は次のとおりです。

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

リンクには、.bacpacファイルから問題のSQLステートメントを削除するために使用できるPowerShellスクリプトもあります。

37
Marvin Rounce

必要がある:

  • bacpacからマスターキーオブジェクトを削除します
  • bacpacから資格情報オブジェクトを削除します

このスクリプト がMicrosoftに公開されています ブログ を実行し、上記のすべてを実行します。

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

マスターキーを削除して作成された破損したbacpacを修正します。

スクリプトRemoveMasterKeyを実行するためのSugestionは、複数の場所でmodel.xmlファイルにÂを挿入することにより、私の場合は破損したbacpacファイルも作成しました。

ファイルを抽出して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)変更されたmodel.xmlでZipファイルを更新します

2)Zipファイルの名前をbacpac拡張子に変更します

3)dacchksum.exe /i:database.bacpacを実行します(database.bacpacはbacpacファイルの名前です)

4)bacpacファイルのOrigin.xmlをdacchksum.exeによって提供される新しい値で更新します

0
Just_a_guy