You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019企业版HA故障转移后主密钥重复配置如何解决

SQL Server 2019 HA集群故障转移后加密密钥失效永久解决方案

问题本质是SQL Server实例级的服务主密钥(SMK)在集群各节点不统一导致的:数据库主密钥(DMK)默认会被当前实例的SMK加密实现自动解密,而每个独立安装的SQL Server实例都会生成唯一的SMK,HA集群各节点的SMK不一致时,故障转移到新节点后,新节点无法解密原有实例加密的DMK,导致加密对象无法访问,必须手动操作DMK才能恢复。
你之前使用的删除并重建主密钥、证书的脚本风险极高,会直接导致所有使用原有密钥加密的历史数据无法解密,仅适用于测试环境或者加密数据可以完全重建的场景,生产环境禁止使用该脚本。

方案1:同步所有集群节点的服务主密钥(推荐,无业务侵入)

该方案可以从根源解决节点间密钥不兼容问题,无需修改业务代码:

  • 第一步:在当前主节点实例上备份SMK,运行如下脚本:
BACKUP SERVICE MASTER KEY TO FILE = '集群所有节点可访问的共享路径\SQL_CLUSTER_SMK.bak'
ENCRYPTION BY PASSWORD = '自定义强密码,务必妥善保管';
  • 第二步:依次登录HA集群内的所有辅助节点实例,运行如下脚本覆盖本地SMK:
RESTORE SERVICE MASTER KEY FROM FILE = '集群所有节点可访问的共享路径\SQL_CLUSTER_SMK.bak'
DECRYPTION BY PASSWORD = '上一步设置的SMK备份密码'
FORCE;

注:执行FORCE参数会强制覆盖当前节点原有SMK,操作前建议先对各节点原有SMK单独备份,避免异常。

  • 第三步:在当前主节点执行如下脚本,确保DMK被统一后的SMK加密:
USE [MYDATABASE]
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'My_encryption_key';
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY;
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;
CLOSE MASTER KEY;
GO
  • 第四步:手动触发一次故障转移测试,验证新主节点无需运行任何脚本即可正常访问加密对象。

方案2:移除DMK的SMK加密(仅适合特定场景)

如果你不希望同步集群内的SMK,可以选择关闭DMK的自动解密机制,该方案需要修改业务代码:

  • 运行如下脚本调整DMK配置:
USE [MYDATABASE]
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'My_encryption_key';
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY;
CLOSE MASTER KEY;
GO

注:该方案生效后,所有访问加密对称密钥/证书的业务逻辑,都必须先显式执行OPEN MASTER KEY DECRYPTION BY PASSWORD = 'My_encryption_key'打开主密钥,操作完成后再执行CLOSE MASTER KEY关闭,对业务代码有侵入性,普通场景不推荐使用。

操作前置注意事项

  • 所有操作前务必对服务主密钥、数据库主密钥、证书、对称密钥分别做独立离线备份,存放在安全位置,避免密钥丢失导致加密数据完全无法恢复
  • 生产环境操作建议先在同配置测试集群验证完整流程,确认无误后再执行生产操作
  • 同步SMK的操作不需要重启实例,不会影响现有业务运行

内容的提问来源于stack exchange,提问作者Jose Barreto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:18:02