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

如何使用有效RSA密钥手动解密Always Encrypted的列加密密钥?

关于Always Encrypted手动解密列加密密钥(CEK)的解决方案

可以手动使用与原Windows密钥库密钥密钥材料完全一致的Azure RSA密钥解密CEK,具体步骤如下:

1. 导出SQL中存储的加密CEK二进制数据

首先从SQL Server的系统视图中获取被原Windows CMK加密的CEK内容:

SELECT name, encrypted_value
FROM sys.column_encryption_keys_values
WHERE column_encryption_key_id = (
    SELECT column_encryption_key_id 
    FROM sys.column_encryption_keys 
    WHERE name = '你的CEK名称'
)

查询结果中的encrypted_value字段即为加密状态的CEK二进制数据,将其转为Base64字符串备用。

2. 用Azure RSA密钥解密CEK

由于你的Azure密钥与原Windows密钥可交叉加解密,密钥材料完全匹配,可通过Azure密钥库的解密API处理加密的CEK数据(Always Encrypted默认使用RSA-OAEP算法)。以PowerShell为例:

# 获取Azure密钥库目标密钥
$key = Get-AzKeyVaultKey -VaultName "你的密钥库名称" -Name "你的RSA密钥名称"

# 转换加密CEK为字节数组
$encryptedCekBytes = [Convert]::FromBase64String("步骤1中获取的encrypted_value Base64字符串")

# 调用解密操作
$decryptedResult = Unlock-AzKeyVaultKey -Key $key | Invoke-AzKeyVaultKeyOperation `
    -Operation Decrypt `
    -Algorithm RSA-OAEP `
    -Value $encryptedCekBytes

# 明文CEK存储在Result属性中
$plaintextCek = $decryptedResult.Result

3. 重新创建关联Azure CMK的CEK条目

拿到明文CEK后,需要用Azure CMK重新加密它,并更新SQL中的CEK关联关系:

3.1 用Azure CMK加密明文CEK

# 加密明文CEK
$encryptedNewCekResult = Unlock-AzKeyVaultKey -Key $key | Invoke-AzKeyVaultKeyOperation `
    -Operation Encrypt `
    -Algorithm RSA-OAEP `
    -Value $plaintextCek

# 转换为SQL所需的十六进制格式(前缀加0x)
$encryptedNewCekHex = "0x" + [BitConverter]::ToString($encryptedNewCekResult.Result).Replace("-", "")

3.2 更新SQL中的CEK

执行ALTER语句将新的加密CEK值关联到Azure CMK:

ALTER COLUMN ENCRYPTION KEY [你的CEK名称]
ADD VALUE
(
    COLUMN_MASTER_KEY = [你的Azure CMK名称],
    ALGORITHM = 'RSA_OAEP',
    ENCRYPTED_VALUE = $encryptedNewCekHex -- 替换为步骤3.1生成的十六进制字符串
)

执行完成后,即可通过Azure CMK解密CEK,正常访问加密列数据。

关键注意事项

  • 必须确保Azure RSA密钥与原Windows密钥库密钥的私钥材料完全一致,仅公钥匹配无法完成解密。你已验证交叉加解密,此条件已满足。
  • 操作过程中需严格保护明文CEK的安全,避免泄露,操作完成后及时清理内存中的敏感数据。
  • 若使用Azure SQL Database,可结合Azure Key Vault的集成功能简化流程,但核心逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:27:38