首页 > 解决方案 > 有时我们需要在故障转移后手动打开加密密钥,有时不需要

问题描述

我已经将我的数据库从本地 SQL 服务器迁移到了托管实例并配置了故障转移组。我已经在主数据库和辅助数据库上打开了加密密钥,但有时仍需要在故障转移后重新打开加密密钥。

标签: azurefailoverazure-sql-managed-instance

解决方案


问题是你的数据库主密钥的解密是基于你的服务主密钥的——这在你的主实例和辅助实例之间是不同的(我还没有在 Azure SQL 托管实例中找到一种方法来备份和恢复实例之间的 SMK - 非 Azure 托管的 SQL Server 允许这样做)。因此,使用您当前的方法,您只能在运行 OPEN MASTER KEY... ALTER MASTER KEY... 语句时在主实例上解密...而在辅助实例上它将失败。

答案是什么?根据https://stackoverflow.com/a/66467547/1450351您需要在辅助实例的主数据库上添加数据库主密钥密码(如果数据库主密钥的解密不适用于服务主密钥,它会查找数据库主密钥密码 - 这样它就不需要服务主密钥在两个实例上都相同)例如

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

推荐阅读