SSMS 2016导入Azure SQL v12 backpac:主密钥时不支持无密码



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

  1. 在与原始
  2. 相同的服务器上创建我的Azure SQL v12数据库的副本
  3. 将复制版本(完全不受用户交互影响)导出到blob存储
  4. 从blob存储下载。backac文件到我的本地驱动器
  5. 在SSMS(2016年10月发布)我的本地sql server实例,右键单击数据库,选择"导入数据层应用程序"
  6. 选择我最近下载的backpac文件并开始导入

它只花了几秒钟就爆炸了,我得到了错误:

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开发者版(v13.0.1722.0)。

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

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

总之,他们想出的解决办法是:

  1. 禁用服务器(或数据库)审计
  2. 使用DROP MASTER KEY命令删除数据库主键

则导出按预期工作。希望Azure能尽快解决这个问题,以便审计和导出可以一起工作。

2017年3月21日更新MS

由于修复需要一些时间来部署,他们还建议使用替代解决方案,不需要任何额外步骤(如禁用审计或博客的步骤)避免这个问题。启用审计后,请更新主控板输入密钥并设置密码。为现有主机设置密码Key将缓解这个问题。同样,设置密码也不会影响审计,它将继续工作。添加的语法密码如下:

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

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

我最终解决这个问题的方法是这样做:

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

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

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

注意:我能够做到这一点,因为我只想要原始数据库中的数据来刷新我的本地开发副本-我还没有完全研究这的含义

你需要:

  • 从后台删除主密钥对象
  • 从后台删除凭据对象

在微软博客上发布了这个脚本,运行它,它将完成上述所有操作。

C:PS> .RemoveMasterKey.ps1  -bacpacPath "C:BacPacsTest.bacpac

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

建议运行脚本RemoveMasterKey,也创建了一个损坏的bacpac文件在我的情况下,插入Â到模型.xml文件在多个地方。

有一种编辑backpac的方法:提取文件,删除model.xml文件中的错误字符,然后为Origin.xml文件生成一个新的校验和

使用. backpac扩展名压缩文件后,您可以导入backpac。

修复:http://inworksllc.com/editing-sql-database-azure-bacpac-files/

校验和发电机:https://github.com/gertd/dac/tree/master/drop/debug

步骤提供:

1)用修改后的model.xml更新zip文件

2)用backpac扩展名

重命名zip文件

3)运行dacchksum.exe/i:database。backpac(其中数据库。backpac是backpac文件的名称)

4)用dacchksum.exe

提供的新值更新backpac文件中的Origin.xml

最新更新