我可以备份存储在 Azure 托管实例中的服务主密钥吗?

Posted

技术标签:

【中文标题】我可以备份存储在 Azure 托管实例中的服务主密钥吗?【英文标题】:Can i backup my service master key stored in azure managed instance? 【发布时间】:2020-05-21 00:08:55 【问题描述】:

我需要在托管实例中备份我的服务主密钥,然后将其还原到辅助托管实例。

【问题讨论】:

Priya 您是如何解决问题的?我有一个 SQL 托管实例故障转移组,我遇到了问题,因为这两个实例显然具有不同的服务主密钥,因此当发生故障转移时,辅助数据库无法解密,因为服务主密钥不是预期的“请创建数据库中的主密钥或在执行此操作之前在会话中打开主密钥。” 参考下面我的回答 - 我通过在辅助实例的主数据库上添加数据库主密钥密码解决了我的问题(如果数据库主密钥的解密不适用于服务主密钥,它会查找数据库主密钥密码 - 这样它就不需要两个实例上的服务主密钥相同) 【参考方案1】:

您不能这样做,但我建议您在 KeyVault 中创建一个密钥,然后使用它来加密主要和辅助托管实例。只需确保两个实例都在同一个订阅中。

【讨论】:

【参考方案2】:

我找不到任何人提供在 Azure SQL 托管实例中备份服务主密钥的示例,所以我认为这是不可能的。

但是,我假设您想这样做是因为您在解密辅助实例上的 CLE(单元/列级加密)时遇到了问题。我遇到了同样的问题Decryption issue with Azure SQL Managed Instance CLE on secondary instance of a failover group,最好的解决方案是在辅助实例的主数据库上创建一个数据库主密钥密码,例如

EXEC sp_control_dbmasterkey_password @db_name = N'MyDatabaseWithCLE',   
    @password = N'XX MY MASTER KEY PASSWORD XX’, @action = N'add';  
GO

SQL Server 有另一种解密 DMK 的方法。如果 DMK 无法使用 SMK 解密,它会在凭证存储中搜索与相同系列 GUID 匹配的密码。如果它找到与您的数据库匹配的家庭 GUID,它将尝试使用存储的密码解密 DMK。如果成功,它将使用 DMK 加密或解密数据库中的凭据或密钥。

【讨论】:

以上是关于我可以备份存储在 Azure 托管实例中的服务主密钥吗?的主要内容,如果未能解决你的问题,请参考以下文章

Azure - 数据库迁移服务中永无止境的完整备份上传

在哪里可以找到 Azure SQL 数据库备份?

Azure 恢复服务和 SQL 2014 托管备份不能很好地配合使用

Azure 服务结构

为啥我的 Azure 应用服务无法使用托管标识连接到 Azure 存储帐户?

保护 Azure 存储帐户中托管的静态网站的路由