你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

在 Azure Synapse Analytics 中移除透明数据加密保护器

Tip

Microsoft Fabric Data Warehouse是数据湖基础上的企业规模关系仓库,具有未来就绪的体系结构、内置 AI 和新功能。 如果不熟悉数据仓库,请从Fabric Data Warehouse开始。 现有的指定 SQL 池工作负荷可以升级到 Fabric,以跨数据科学、实时分析和报告访问新功能。

适用于:Azure Synapse Analytics 专用 SQL 池(以前称为 SQL DW)

当客户管理的TDE保护器可能被攻破时,请使用此程序。 在删除或禁用旧密钥之前,先切换到新的保护程序,这样专用的 SQL 池仍然可访问。

Caution

删除或禁用一个主动的TDE保护器会使所有依赖它的专用SQL池无法访问。 在移除密钥前,请仔细审查事件响应计划及备份-保留要求。

注意

本文介绍了独立的专用SQL池(前称SQL DW)。 关于Synapse工作空间中的专用SQL池,请参见Azure Synapse Analytics工作空间的加密。

删除密钥并不会使之前备份或恢复到另一个密钥库的密钥副本失效。 保护并清点每一份副本,作为事件响应的一部分。

Prerequisites

检查 TDE 保护程序指纹

以下步骤概述了如何检查特定数据库的虚拟日志文件(VLF)仍在使用哪些 TDE 保护器指纹。

运行以下查询以查找当前数据库TDE保护器的指纹和数据库ID:

SELECT [database_id],
       [encryption_state],
       [encryptor_type], /*asymmetric key means Azure Key Vault, certificate means service-managed keys*/
       [encryptor_thumbprint]
 FROM [sys].[dm_database_encryption_keys]

运行以下查询以返回正在使用的VLF和TDE保护器拇指指纹。 每个不同的拇指指纹对应 Azure 密钥保管库 中的不同密钥:

SELECT * FROM sys.dm_db_log_info (database_id)

或者,可以使用 PowerShell 或 Azure CLI:

  • PowerShell命令Get-AzSqlServerKeyVaultKey提供了查询中使用的TDE保护器的指纹,这样你可以看到Azure 密钥保管库中哪些密钥需要保留,哪些需要删除。 只有数据库不再使用的密钥才能安全地从 Azure 密钥保管库 中删除。

  • Azure CLI 命令 az sql server key show 提供了查询中使用的 TDE 保护程序的指纹,这样你可以了解在 Azure 密钥保管库 中哪些密钥需要保留,哪些需要删除。 只有数据库不再使用的密钥才能安全地从 Azure 密钥保管库 中删除。

使加密资源保持可访问

PowerShell

  1. 在 Azure 密钥保管库 中创建新密钥。 确保你在与可能被攻破的 TDE 保护器分开的密钥保管库中创建这个新密钥,因为访问控制是在密钥保管库级别设置的。

  2. 通过使用 Add-AzSqlServerKeyVaultKey 和 Set-AzSqlServerTransparentDataEncryptionProtector cmdlet 将新密钥添加到服务器,并将其更新为服务器的新 TDE 保护器。

    # add the key from Azure Key Vault to the server  
    Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>
    
    # set the key as the TDE protector for all resources under the server
    Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -ServerName <LogicalServerName> -Type AzureKeyVault -KeyId <KeyVaultKeyId>
    
  3. 确保服务器和任何副本通过使用 Get-AzSqlServerTransparentDataEncryptionProtector cmdlet 更新到新的 TDE 保护器。

    注意

    将新 TDE 保护器传播到服务器中的所有数据库和辅助数据库可能需要几分钟时间才能完成。

    Get-AzSqlServerTransparentDataEncryptionProtector -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  4. 在 Azure 密钥保管库 中 备份新密钥 。

    # -OutputFile parameter is optional; if removed, a file name is automatically generated.
    Backup-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName> -OutputFile <DesiredBackupFilePath>
    
  5. 使用 Remove-AzKeyVaultKey cmdlet 从 Azure 密钥保管库 删除已泄露的密钥。

    Remove-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName>
    
  6. 若要将来将密钥还原到 Azure 密钥保管库,请使用 Restore-AzKeyVaultKey cmdlet。

    Restore-AzKeyVaultKey -VaultName <KeyVaultName> -InputFile <BackupFilePath>
    

Azure CLI

有关命令参考,请参阅 Azure CLI keyvault。

  1. 在 Azure 密钥保管库 中创建新密钥。 确保你在与可能被攻破的 TDE 保护器分开的密钥保管库中创建新密钥,因为访问控制是在密钥保管库层面配置的。

  2. 将新密钥添加到服务器,并将其更新为服务器的新 TDE 保护器。

    # add the key from Azure Key Vault to the server  
    az sql server key create --kid <KeyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <LogicalServerName>
    
    # set the key as the TDE protector for all resources under the server
    az sql server tde-key set --server-key-type AzureKeyVault --kid <KeyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <LogicalServerName>
    
  3. 确保服务器和所有副本更新到新的TDE保护器。

    注意

    将新 TDE 保护器传播到服务器中的所有数据库和辅助数据库可能需要几分钟时间才能完成。

    az sql server tde-key show --resource-group <SQLDatabaseResourceGroupName> --server <LogicalServerName>
    
  4. 在 Azure 密钥保管库 中备份新密钥。

    # --file parameter is optional; if removed, a file name is automatically generated.
    az keyvault key backup --file <DesiredBackupFilePath> --name <KeyVaultKeyName> --vault-name <KeyVaultName>
    
  5. 从 Azure 密钥保管库 中删除已泄露的密钥。

    az keyvault key delete --name <KeyVaultKeyName> --vault-name <KeyVaultName>
    
  6. 日后可将密钥还原到 Azure 密钥保管库。

    az keyvault key restore --file <BackupFilePath> --vault-name <KeyVaultName>
    

使加密的资源不可访问

  1. 删除那些使用可能被攻破密钥进行加密的数据库。

    系统会自动备份数据库和日志文件,因此你可以在任何时间点对数据库进行时间点还原(只要你提供密钥)。 在删除活动的 TDE 保护程序之前,请先删除数据库,以避免最近 10 分钟内的事务可能发生数据丢失。

  2. 在 Azure 密钥保管库 中备份 TDE 保护程序的密钥材料。

  3. 从 Azure 密钥保管库 中删除可能泄露的密钥。

注意

密钥库的权限更改可能要10分钟左右才会生效。 这段时间包括在 AKV 中撤销对 TDE 保护程序的访问权限,而用户可能仍然拥有访问权限。