有没有办法从 azure 数据库中删除 blob 存储凭据以允许 bacpac 本地还原?

Is there a way to remove blob storage credential from azure database to allow bacpac local restore?

我正在尝试从 Azure 导出 bacpac 并在 SQLEXPRESS 2016 上本地恢复它。当我尝试恢复它时,虽然我从 SSMS 中的导入数据层应用程序向导中收到以下错误:

Could not import package.

Warning SQL72012: The object [TestBacPacDB_Data] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.

Warning SQL72012: The object [TestBacPacDB_Log] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source'

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;

经过一番挖掘,我发现数据库中添加了凭据和主密钥。凭据名称引用了一个 blob 存储容器,所以我想也许在某个时候将容器设置为外部资源或类似的东西进行审核。

我想删除这个凭据,这样我就可以在本地恢复数据库,但是数据库抛出一个错误,指出它正在使用中。我已经尝试禁用 Azure 中的日志记录,但仍然无法删除凭据。

我知道有时 Azure 关闭资源需要一些时间,所以可能就是这个原因,但我想知道是否有其他人遇到过类似的问题。

我试图避免必须为主密钥设置密码,因为我不关心本地的凭据,如这个问题所示:

我遇到了完全相同的问题,并尝试了各种可能的修复方法。大多数与重新输入系统密钥、先制作副本等有关...但绝对没有任何效果。

虽然这很疯狂,但我最终绕过它的唯一方法是手动编辑内部结构:

  1. 从任何地方获取原始来源或副本的 bacpac
  2. 重命名为 .zip,并解压文件夹结构
  3. 编辑"model.xml",搜索与"master key"和/或"shared access signature"有关的任何内容并删除相应的节点
  4. 计算现在修改的 Sha-256 校验和 model.xml
  5. 替换"Origin.xml"
  6. 底部的校验和
  7. 重新压缩所有文件并重命名回 xxx.bacpac
  8. 像往常一样导入本地系统

最终,我们创建了一个主密钥。为了以这种方式在本地恢复我们的数据库,我们首先在 SSMS 中手动创建数据库,然后向其中添加一个主密钥。这允许数据导入正常工作。