30

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

  1. 在与原始服务器相同的服务器上创建我的 Azure SQL v12 数据库的副本
  2. 将复制版本(从用户交互中完全不活动)导出到 blob 存储
  3. 将 .bacpac 文件从 blob 存储下载到我的本地驱动器
  4. 在 SSMS(2016 年 10 月版)我的本地 sql server 实例中,右键单击数据库并选择“导入数据层应用程序”
  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)。

4

4 回答 4

38

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

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

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

  1. 在服务器(或数据库)上禁用审核
  2. 使用命令删除数据库主密钥DROP MASTER KEY

然后导出按预期工作。希望 Azure 能尽快解决此问题,以便审核和导出可以协同工作。

2017 年 3 月 21 日更新MS 提供的更好的解决方法

由于修复需要一些时间来部署,他们还建议了一个替代解决方案,该解决方案不需要您采取任何额外的步骤(如禁用审核或博客中的步骤)来避免此问题。启用审核后,请更新主密钥并设置密码。为现有主密钥设置密码将缓解该问题。此外,设置密码不会影响审核,它会继续工作。添加密码的语法如下:

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

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

于 2017-03-10T08:10:27.597 回答
16

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

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

    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
    
  3. 按照原帖中的步骤 2-5

我还没有看到这方面的文档,但显然,当您创建 Azure SQL 数据库时,它会创建一个没有密码的数据库主密钥 (DMK),而在 SQL Server 2016 中这是不行的。希望这可以帮助其他人。

注意:我之所以能够做到这一点,是因为我只希望原始数据库中的数据刷新我的本地开发副本——我还没有完全研究过它的含义。

于 2016-11-14T01:21:38.747 回答
12

你需要:

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

微软博客上发布了这个脚本,运行它,就会完成以上所有工作。

C:\PS> .\RemoveMasterKey.ps1  -bacpacPath "C:\BacPacs\Test.bacpac
于 2017-10-18T11:33:33.587 回答
0

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

运行脚本 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) 使用修改后的 model.xml 更新 zip 文件

2) 使用 bacpac 扩展名重命名 zip 文件

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

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

于 2018-02-09T14:46:38.767 回答