SSMS 2016错误导入Azure SQL v12 bacpac:不支持密码的主密钥

时间:2016-11-13 15:40:06

标签: sql-server azure azure-sql-database ssms ssms-2016

我已经完成了这几十次,但最近才遇到这个错误。以下是我到达这里的步骤:

  1. 在与原始
  2. 相同的服务器上创建Azure SQL v12数据库的副本
  3. 将副本版本(从用户交互完全不活动)导出到blob存储
  4. 将.bacpac文件从blob存储下载到我的本地驱动器
  5. 在SSMS(2016年10月发布)中我的本地sql server实例,右键单击Databases并选择' Import Data Tier Application'
  6. 选择我最近下载的bacpac文件并开始导入
  7. 它只需几秒钟就可以炸弹,我收到错误:

    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)。

4 个答案:

答案 0 :(得分:37)

我遇到了同样的问题。在与Azure支持人员交谈后,他们发现问题是由于创建了一个空白数据库主密钥来加密审计的存储凭据(审计是可选设置)。

请注意,数据库审核设置是从服务器设置继承的。

无论如何,他们想出的工作是:

  1. 禁用服务器(或数据库)上的审核
  2. 使用DROP MASTER KEY命令删除数据库主密钥。
  3. 然后导出按预期工作。希望Azure能尽快解决这个问题,以便审计和导出能够协同工作。

    2017年3月21日更新Better work-around From MS

      

    由于修复程序需要一段时间才能部署,因此他们也提出了建议   替代解决方案,不需要任何额外的步骤   (如禁用审核或博客中的步骤)在您身边   避免这个问题。启用审核后,请更新主服务器   键并设置密码。设置现有主服务器的密码   密钥将缓解这个问题。此外,设置密码不会   影响审计,它将继续工作。添加语法   密码如下:

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

    该链接还有一个PowerShell脚本,您可以使用该脚本从.bacpac文件中删除有问题的SQL语句。

答案 1 :(得分:16)

好的,我最终解决此问题的方法是执行以下操作:

  1. 在与原始
  2. 相同的服务器上创建SQL Azure数据库的副本
  3. 在该数据库中运行以下脚本:

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  4. 按照原始帖子中的步骤2-5进行操作
  5. 我还没有看过关于此的文档,但显然当您创建Azure SQL数据库时,它会创建一个没有密码的数据库主密钥(DMK),而在SQL Server 2016中,这是不行的。希望这有助于其他人。

    注意:我能够这样做,因为我只希望原始数据库中的数据刷新我的本地开发副本 - 我还没有完全研究它的含义。

答案 2 :(得分:11)

你需要:

  • 从bacpac中删除主密钥对象
  • 从bacpac中删除凭证对象

this script上发布blog,运行它,并将执行以上所有操作。

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

答案 3 :(得分:0)

修复通过删除主密钥创建的损坏的bacpac。

Sugestion运行脚本RemoveMasterKey,在我的情况下通过将Â插入到多个地方的model.xml文件中也创建了一个损坏的bacpac文件。

有一种方法可以通过extractig文件编辑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)使用bacpac扩展名重命名zip文件

3)运行dacchksum.exe /i:database.bacpac(其中database.bacpac是bacpac文件的名称)

4)使用dacchksum.exe提供的新值更新bacpac文件中的Origin.xml