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

无法通过Azure SDK for Python配置Azure SQL Server的TDE(CMK方式)

问题排查:Azure SQL Server 基于客户托管密钥(CMK)的透明数据加密(TDE)启用失败

核心问题

你的代码仅完成了将密钥保管库密钥关联到SQL Server的操作,但未显式启用TDE功能本身。此外还有几处潜在配置疏漏需要验证:

修复步骤

1. 补充启用TDE的代码

在关联完ServerKey后,必须单独更新SQL Server的TDE状态为启用:

from azure.mgmt.sql.models import TransparentDataEncryption

# 在创建server_key的代码后添加以下逻辑
tde_config = TransparentDataEncryption(status="Enabled")
sql_client.transparent_data_encryptions.begin_create_or_update(
    RESOURCE_GROUP_NAME,
    server_name,
    "current",
    tde_config
).wait()

2. 验证密钥保管库权限配置

确保SQL Server的系统托管标识(若使用用户托管标识则对应该标识)在密钥保管库中拥有以下权限:

  • get
  • wrapKey
  • unwrapKey
    需直接为SQL Server标识分配这些权限,不能依赖继承权限。

3. 检查密钥URI格式

确认生成的URI符合标准格式:https://<vault-name>.vault.azure.net/keys/<key-name>/<key-version>,可通过打印uri变量值验证拼接是否正确。

4. 确认create_sql_cmk函数的正确性

该函数需确保:

  • 在密钥保管库中创建了符合要求的RSA密钥(建议2048位及以上)
  • 已为SQL Server标识授予该密钥的上述必要权限
  • 返回的key_name是正确的密钥名称

完整修正后的代码示例

def enable_transparent_data_encryption(server_name: str):
    key_client = KeyClient(vault_url=KEY_VAULT_URL, credential=credentials)
    key_name = create_sql_cmk(server_name)
    key = key_client.get_key(name=key_name)
    key_version = key.properties.version
    server_key_name = f'{KEY_VAULT_URL.split("//")[-1].split(".")[0]}_{key_name}_{key_version}'
    
    # 关联密钥保管库密钥到SQL Server
    tde_server_key = ServerKey(
        auto_rotation_enabled=True,
        server_key_type=ServerKeyType.AZURE_KEY_VAULT,
        uri=f'{KEY_VAULT_URL}keys/{key_name}/{key_version}'
    )
    sql_client.server_keys.begin_create_or_update(RESOURCE_GROUP_NAME, server_name, server_key_name, tde_server_key).wait()
    
    # 启用TDE功能
    tde_config = TransparentDataEncryption(status="Enabled")
    sql_client.transparent_data_encryptions.begin_create_or_update(
        RESOURCE_GROUP_NAME,
        server_name,
        "current",
        tde_config
    ).wait()
    
    print(f'Enabled - Transparent Data Encryption using CMK on `{server_name}` SQL server.')

额外验证操作

  • 登录Azure门户,进入目标SQL Server的透明数据加密页面,确认状态为“启用”且密钥来源为密钥保管库
  • 查看SQL Server的活动日志,排查是否存在TDE相关的权限或配置失败事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:22