SSMS 2016 导入 Azure SQL v12 bacpac 时出错:不支持没有密码的主密钥
SSMS 2016 Error Importing Azure SQL v12 bacpac: master keys without password not supported
我已经做了几十次了,但最近 运行 遇到了这个错误。以下是我完成的步骤:
- 在与原始数据库相同的服务器上创建我的 Azure SQL v12 数据库的副本
- 将复制版本(用户交互完全不活动)导出到 blob 存储
- 将 .bacpac 文件从 blob 存储下载到我的本地驱动器
- 在 SSMS(2016 年 10 月版)我的本地 sql 服务器实例中,右键单击数据库并选择 'Import Data Tier Application'
- 选择我最近下载的 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).
好的,我最终解决这个问题的方法是执行以下操作:
- 在与原始数据库相同的服务器上创建 SQL Azure 数据库的副本
在该数据库中 运行 以下脚本:
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
- 按照原文中的步骤 2-5 进行操作 post
我还没有看到这方面的文档,但显然当你创建一个 Azure SQL 数据库时,它会创建一个没有密码的数据库主密钥 (DMK),在 SQL Server 2016 中这个不好。希望这可以帮助其他人。
注意:我之所以能够做到这一点,是因为我只希望原始数据库中的数据刷新我的本地开发副本 - 我还没有完全研究它的含义。
我遇到了同样的问题。在与 Azure 支持人员交谈后,他们发现问题是因为创建了一个空白的数据库主密钥来加密审计的存储凭据(审计是可选设置)。
请注意,数据库审核设置继承自服务器设置。
无论如何,他们想出的解决办法是:
- 在服务器(或数据库)上禁用审计
- 使用
DROP MASTER KEY
命令删除数据库主密钥。
然后导出工作正常。希望 Azure 能尽快解决这个问题,以便审计和导出可以协同工作。
2017 年 3 月 21 日更新 Better work-around From MS
As the fix will take some time to be deployed, they also suggested an
alternative solution, which will not require any additional steps
(like disabling auditing or the steps form the blog) on your side to
avoid this issue. After auditing is enabled, please update the master
key and set the password. Setting a password for the existing master
key will mitigate the issue. Also, setting the password will not
impact auditing and it will keep working. The syntax to add the
password is as follows:
-- execute in the user database
ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = ‘##############’;
link 还有一个 PowerShell 脚本,您可以使用它从 .bacpac
文件中删除有问题的 SQL 语句。
您需要:
- 从 bacpac 中删除主密钥对象
- 从 bacpac 中删除凭证对象
有this script published on Microsoft blog、运行它,并且会做以上所有事情。
C:\PS> .\RemoveMasterKey.ps1 -bacpacPath "C:\BacPacs\Test.bacpac
修复通过删除主密钥创建的损坏的 bacpac。
对 运行 脚本 RemoveMasterKey 的建议,在我的案例中还通过将 Â 插入 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) 使用 bacpac 扩展名重命名 zip 文件
3) 运行 dacchksum.exe /i:database.bacpac (其中 database.bacpac 是 bacpac 文件的名称)
4) 使用 dacchksum.exe
提供的新值更新 bacpac 文件中的 Origin.xml
我已经做了几十次了,但最近 运行 遇到了这个错误。以下是我完成的步骤:
- 在与原始数据库相同的服务器上创建我的 Azure SQL v12 数据库的副本
- 将复制版本(用户交互完全不活动)导出到 blob 存储
- 将 .bacpac 文件从 blob 存储下载到我的本地驱动器
- 在 SSMS(2016 年 10 月版)我的本地 sql 服务器实例中,右键单击数据库并选择 'Import Data Tier Application'
- 选择我最近下载的 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).
好的,我最终解决这个问题的方法是执行以下操作:
- 在与原始数据库相同的服务器上创建 SQL Azure 数据库的副本
在该数据库中 运行 以下脚本:
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
- 按照原文中的步骤 2-5 进行操作 post
我还没有看到这方面的文档,但显然当你创建一个 Azure SQL 数据库时,它会创建一个没有密码的数据库主密钥 (DMK),在 SQL Server 2016 中这个不好。希望这可以帮助其他人。
注意:我之所以能够做到这一点,是因为我只希望原始数据库中的数据刷新我的本地开发副本 - 我还没有完全研究它的含义。
我遇到了同样的问题。在与 Azure 支持人员交谈后,他们发现问题是因为创建了一个空白的数据库主密钥来加密审计的存储凭据(审计是可选设置)。
请注意,数据库审核设置继承自服务器设置。
无论如何,他们想出的解决办法是:
- 在服务器(或数据库)上禁用审计
- 使用
DROP MASTER KEY
命令删除数据库主密钥。
然后导出工作正常。希望 Azure 能尽快解决这个问题,以便审计和导出可以协同工作。
2017 年 3 月 21 日更新 Better work-around From MS
As the fix will take some time to be deployed, they also suggested an alternative solution, which will not require any additional steps (like disabling auditing or the steps form the blog) on your side to avoid this issue. After auditing is enabled, please update the master key and set the password. Setting a password for the existing master key will mitigate the issue. Also, setting the password will not impact auditing and it will keep working. The syntax to add the password is as follows:
-- execute in the user database
ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = ‘##############’;
link 还有一个 PowerShell 脚本,您可以使用它从 .bacpac
文件中删除有问题的 SQL 语句。
您需要:
- 从 bacpac 中删除主密钥对象
- 从 bacpac 中删除凭证对象
有this script published on Microsoft blog、运行它,并且会做以上所有事情。
C:\PS> .\RemoveMasterKey.ps1 -bacpacPath "C:\BacPacs\Test.bacpac
修复通过删除主密钥创建的损坏的 bacpac。
对 运行 脚本 RemoveMasterKey 的建议,在我的案例中还通过将 Â 插入 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) 使用 bacpac 扩展名重命名 zip 文件
3) 运行 dacchksum.exe /i:database.bacpac (其中 database.bacpac 是 bacpac 文件的名称)
4) 使用 dacchksum.exe
提供的新值更新 bacpac 文件中的 Origin.xml