你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
使用数据库级别客户管理的密钥进行 TDE 标识和密钥管理
本文内容
适用于: Azure SQL 数据库
注意
数据库级别 TDE CMK 可用于 Azure SQL 数据库(所有 SQL 数据库版本)。 它不适用于 Azure SQL 托管实例、本地 SQL Server、Azure VM 和 Azure Synapse Analytics(专用 SQL 池 [以前称为 SQL DW])。
通过排除联合客户端 ID 参数,可以应用相同的指南在同一租户中配置数据库级别客户管理的密钥。 有关数据库级别客户管理的密钥的详细信息,请参阅在数据库级别使用客户管理的密钥进行透明数据加密 (TDE) 。
在本指南中,我们将介绍有关在数据库级别使用透明数据加密 (TDE) 和客户管理的密钥 (CMK) 创建、更新和检索 Azure SQL 数据库的步骤,并利用用户分配的托管标识 来访问 Azure Key Vault 。 Azure Key Vault 与 Azure SQL 数据库位于不同的 Microsoft Entra 租户中。 有关详细信息,请参阅使用透明数据加密的跨租户客户管理的密钥 。
先决条件
本指南假定你有两个 Microsoft Entra 租户。
第一个租户包括 Azure SQL 数据库资源、多租户 Microsoft Entra 应用程序和用户分配的托管标识组成。
第二个租户包含 Azure Key Vault。
有关设置跨租户 CMK 以及配置 Microsoft Entra 应用程序和 Azure Key Vault 所需的 RBAC 权限的全面说明,请参阅以下指南之一:
Azure CLI 2.52.0 或更高版本。
Az PowerShell 模块 10.3.0 或更高版本。
数据库级别 CMK 所需的 RBAC 权限与服务器级别 CMK 所需的权限相同。 具体来说,在服务器级别使用 Azure Key Vault 、托管身份 和 TDE 的跨租户 CMK 时适用的相同 RBAC 权限也适用于数据库级别。 有关密钥管理和访问策略的详细信息,请参阅密钥管理 。
第一个租户上的必需资源
考虑到本教程的教学目标,我们假设第一个租户属于独立软件供应商 (ISV),第二个租户来自其客户端。 有关此场景的详细信息,请参阅使用透明数据加密的跨租户客户管理的密钥 。
在使用跨租户 CMK 为 Azure SQL 数据库配置 TDE 之前,需要有一个多租户 Microsoft Entra 应用程序,该应用程序配置了用户分配的托管标识,作为应用程序的联合标识凭据进行分配。 按照先决条件中的指南之一操作。
在要创建 Azure SQL 数据库的第一个租户上,创建并配置多租户 Microsoft Entra 应用程序 。
创建用户分配的托管标识 。
将用户分配的托管标识配置 为多租户应用程序的联合标识凭据 。
记录应用程序名称和应用程序 ID。 这可以在 Azure 门户 >Microsoft Entra ID >企业应用程序 中找到,然后搜索创建的应用程序。
第二个租户上所需的资源
注意
自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模块已弃用。 若要了解详细信息,请阅读有关弃用的更新 。 在此日期之后,对这些模块的支持仅限于到 Microsoft Graph PowerShell SDK 的迁移帮助和安全性修复。 弃用的模块将持续运行至 2025 年 3 月 30 日。
我们建议迁移到 Microsoft Graph PowerShell ,以便与 Microsoft Entra ID(以前称为 Azure AD)进行交互。 有关常见迁移问题,请参阅迁移常见问题解答 。 注意: 2024 年 6 月 30 日之后,MSOnline 版本 1.0.x 可能会遇到中断。
在 Azure Key Vault 所在的第二个租户上,使用第一个租户中注册应用程序的应用程序 ID 创建服务主体(应用程序) 。 下面是一些有关如何注册多租户应用程序的示例。 分别将 <TenantID>
和 <ApplicationID>
替换为 Microsoft Entra ID 中的客户端租户 ID 和多租户应用程序中的应用程序 ID :
请转到 Azure 门户 >Microsoft Entra ID >企业应用程序 ,然后搜索创建的应用程序。
创建 Azure Key Vault (如果还没有),并创建密钥 。
创建或设置访问策略 。
创建访问策略时,在“密钥权限”下选择“获取、包装密钥和解包密钥”权限。
创建访问策略时,选择在“主体”选项的第一步中创建的多租户应用程序。
创建访问策略和密钥后,从密钥保管库检索密钥 并记录密钥标识符。
使用数据库级别客户管理的密钥创建新的 Azure SQL 数据库
以下示例介绍如何使用用户分配的托管标识在 Azure SQL 数据库上创建数据库,以及如何在数据库级别设置跨租户客户管理的密钥。 在数据库创建阶段为透明数据加密设置客户管理的密钥需要用户分配的托管标识。
浏览到 Azure 门户中的选择 SQL 部署 选项页。
如果你尚未登录到 Azure 门户,请按提示登录。
在“SQL 数据库”下将“资源类型”设置保留为“单一数据库”,然后选择“创建” 。
在“创建 SQL 数据库”窗体的“基本信息”选项卡上的“项目详细信息”下,为数据库选择所需的 Azure订阅、资源组和服务器。 然后,使用唯一名称作为数据库名称。 如果尚未为 Azure SQL 数据库创建逻辑服务器,请参阅使用跨租户客户管理的密钥 (CMK) 创建配置了 TDE 的服务器 。
转到“安全性”选项卡后,选择“配置透明数据加密”。
在“透明数据加密 ”菜单上,选择“数据库级客户管理密钥(CMK) ”。
对于“用户分配的托管身份 ”,选择“配置 ”以启用“数据库身份 ”,并在以下情况下向资源“添加 ”用户分配的托管身份:所需的身份未在”身份 “菜单中列出。 然后,选择应用 。
在“透明数据加密 ”菜单上,选择“更改密钥 ”。 为要用于 TDE 的客户管理的密钥选择所需的“订阅”、“密钥保管库”、“密钥”和“版本”。 选择“选择”按钮 。 选择密钥后,还可以根据需要使用“透明数据加密 ”菜单中的“Azure Key Vault URI (对象标识符) ”添加其他数据库密钥。
也可以使用“透明数据加密 ”菜单中的“自动轮换密钥 ”复选框在数据库级别启用自动密钥轮换 。
选择“应用”以继续创建数据库。
在页面底部选择“查看 + 创建”
在“查看 + 创建”页上,查看后选择“创建”。
注意
如果用户分配的托管标识未在密钥保管库上启用正确的权限,则数据库创建将失败。 用户分配的托管标识将需要密钥保管库上的 Get、wrapKey 和 unwrapKey 权限。 有关详细信息,请参阅使用客户管理的密钥进行透明数据加密的托管标识 。
有关安装当前版本的 Azure CLI 的信息,请参阅安装 Azure CLI 一文。
使用 az sql db create 命令创建通过用户分配的托管标识和跨租户客户管理的 TDE 配置的数据库。 可以在 encryption-protector
字段中使用第二个租户中的密钥标识符。 可在 federated-client-id
字段中使用多租户应用程序的应用程序 ID。 --encryption-protector-auto-rotation
参数可用于在数据库级别启用自动密钥轮换 。
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示
az sql db create --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --sample-name AdventureWorksLT --edition GeneralPurpose --compute-model Serverless --family Gen5 --capacity 2 --assign-identity --user-assigned-identity-id $identityid --encryption-protector $keyid --federated-client-id $federatedclientid --encryption-protector-auto-rotation True
使用 PowerShell 创建在数据库级别通过用户分配的托管标识和跨租户客户管理的 TDE 配置的数据库。
有关 Az PowerShell 模块安装说明,请参阅安装 Azure PowerShell 。 若要了解具体的 cmdlet,请参阅 AzureRM.Sql 。
使用 New-AzSqlDatabase cmdlet。
替换示例中的以下值:
<ResourceGroupName>
:Azure SQL 逻辑服务器的资源组名称
<DatabaseName>
:使用唯一的 Azure SQL 数据库名称
<ServerName>
:使用唯一的 Azure SQL 逻辑服务器名称
<UserAssignedIdentityId>
:要分配给服务器的用户分配的托管标识列表(可以是一个或多个)
<CustomerManagedKeyId>
:第二个租户密钥保管库中的密钥标识符
<FederatedClientId>
:多租户应用程序的应用程序 ID
-EncryptionProtectorAutoRotation
:可用于在数据库级别启用自动密钥轮换
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示
# create a server with user-assigned managed identity and cross-tenant customer-managed TDE with automatic key rotation enabled
$params = @{
ResourceGroupName = '<ResourceGroupName>'
ServerName = '<ServerName>'
DatabaseName = '<DatabaseName>'
AssignIdentity = $true
UserAssignedIdentityId = '<UserAssignedIdentityId>'
EncryptionProtector = '<CustomerManagedKeyId>'
FederatedClientId = '<FederatedClientId>'
EncryptionProtectorAutoRotation = $true
}
New-AzSqlDatabase @params
下面是一个 ARM 模板示例,该模板在数据库级别使用用户分配的托管标识和客户管理的 TDE 创建 Azure SQL 数据库。 对于跨租户 CMK,请使用来自第二个租户密钥保管库的“密钥标识符”,以及来自多租户应用程序的“应用程序 ID”。
有关 ARM 模板的详细信息,请参阅 Azure SQL 数据库和 SQL 托管实例的 Azure 资源管理器模板 。
使用 Azure 门户中的自定义部署 ,在编辑器中生成自己的模板。 接下来,粘贴到示例中后保存配置。
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"server_name": {
"type": "String"
},
"database_name": {
"type": "String"
},
"user_assigned_identity": {
"type": "String"
},
"encryption_protector": {
"type": "String"
},
"federated_client_id": {
"type": "String"
},
"location": {
"type": "String"
},
"encryption_protector_auto_rotation": {
"type": "bool"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2023-02-01-preview",
"name": "[concat(parameters('server_name'), concat('/',parameters('database_name')))]",
"location": "[parameters('location')]",
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 5
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('user_assigned_identity')]": {}
}
},
"properties": {
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": 104857600,
"catalogCollation": "SQL_Latin1_General_CP1_CI_AS",
"zoneRedundant": false,
"readScale": "Disabled",
"requestedBackupStorageRedundancy": "Geo",
"maintenanceConfigurationId": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/SQL_Default",
"isLedgerOn": false,
"encryptionProtector": "[parameters('encryption_protector')]",
"federatedClientId": "[parameters('federated_client_id')]",
"encryptionProtectorAutoRotation": "[parameters('encryption_protector_auto_rotation')]"
}
}
]
}
使用数据库级别客户管理的密钥更新现有的 Azure SQL 数据库
以下示例介绍如何使用用户分配的托管标识更新 Azure SQL 数据库上的现有数据库,以及如何在数据库级别设置跨租户客户管理的密钥。 在数据库创建阶段为透明数据加密设置客户管理的密钥需要用户分配的托管标识。
在 Azure 门户 中,导航到要使用数据库级别客户管理的密钥更新的 SQL 数据库资源。
在“安全性 ”下,选择“标识 ”。 为此数据库添加“用户分配的托管标识”,然后选择“保存”
现在,转到数据库的“安全性 ”下的“数据加密 ”菜单。 选择“数据库级别客户管理的密钥(CMK) ”。 数据库的“数据库标识 ”应该处于“已启用 ”状态,因为已在上一步中配置了身份。
选择“更改密钥”。 为要用于 TDE 的客户管理的密钥选择所需的“订阅”、“密钥保管库”、“密钥”和“版本”。 选择“选择”按钮 。 选择密钥后,还可以根据需要使用“数据加密 ”菜单中的“Azure Key Vault URI (对象标识符) ”添加其他数据库密钥。
如果要在数据库级别启用自动密钥轮换 ,请选中“自动轮换密钥 ”复选框。
选择“保存” 。
有关安装当前版本的 Azure CLI 的信息,请参阅安装 Azure CLI 一文。
使用 az sql db create 命令更新通过用户分配的托管标识和跨租户客户管理的 TDE 配置的数据库。 可以在 encryption-protector
字段中使用第二个租户中的密钥标识符。 可在 federated-client-id
字段中使用多租户应用程序的应用程序 ID。
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示。 --encryption-protector-auto-rotation
参数可用于在数据库级别启用自动密钥轮换 。
az sql db update --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --sample-name AdventureWorksLT --edition GeneralPurpose --compute-model Serverless --family Gen5 --capacity 2 --assign-identity --user-assigned-identity-id $identityid --encryption-protector $keyid --federated-client-id $federatedclientid --keys $keys --keys-to-remove $keysToRemove --encryption-protector-auto-rotation True
列表 $keys
是要添加到数据库的空格分隔的密钥列表,$keysToRemove
是必须从数据库中删除的空格分隔的密钥列表
$keys = '"https://yourvault.vault.azure.net/keys/yourkey1/6638b3667e384aefa31364f94d230000" "https://yourvault.vault.azure.net/keys/yourkey2/ fd021f84a0d94d43b8ef33154bca0000"'
$keysToRemove = '"https://yourvault.vault.azure.net/keys/yourkey3/6638b3667e384aefa31364f94d230000" "https://yourvault.vault.azure.net/keys/yourkey4/fd021f84a0d94d43b8ef33154bca0000"'
使用 PowerShell 更新在数据库级别通过用户分配的托管标识和跨租户客户管理的 TDE 配置的数据库。
有关 Az PowerShell 模块安装说明,请参阅安装 Azure PowerShell 。 若要了解具体的 cmdlet,请参阅 AzureRM.Sql 。
使用 Set-AzSqlDatabase cmdlet。
替换示例中的以下值:
<ResourceGroupName>
:Azure SQL 逻辑服务器的资源组名称
<DatabaseName>
:使用唯一的 Azure SQL 数据库名称
<ServerName>
:使用唯一的 Azure SQL 逻辑服务器名称
<UserAssignedIdentityId>
:要分配给服务器的用户分配的托管标识列表(可以是一个或多个)
<CustomerManagedKeyId>
:第二个租户密钥保管库中的密钥标识符
<FederatedClientId>
:多租户应用程序的应用程序 ID
<ListOfKeys>
:要添加到数据库的数据库级别客户管理的密钥的逗号分隔列表
<ListOfKeysToRemove>
:要从数据库中删除的数据库级别客户管理的密钥的逗号分隔列表
-EncryptionProtectorAutoRotation
:可用于在数据库级别启用自动密钥轮换
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示。
$params = @{
ResourceGroupName = "<ResourceGroupName>"
ServerName = "<ServerName>"
DatabaseName = "<DatabaseName>"
AssignIdentity = $true
UserAssignedIdentityId = "<UserAssignedIdentityId>"
EncryptionProtector = "<CustomerManagedKeyId>"
FederatedClientId = "<FederatedClientId>"
KeyList = "<ListOfKeys>"
KeysToRemove = "<ListOfKeysToRemove>"
EncryptionProtectorAutoRotation = $true
}
Set-AzSqlDatabase @params
-KeyList 和 -KeysToRemove 的示例为:
$keysToAdd = "https://yourvault.vault.azure.net/keys/yourkey1/fd021f84a0d94d43b8ef33154bca0000","https://yourvault.vault.azure.net/keys/yourkey2/fd021f84a0d94d43b8ef33154bca0000"
$keysToRemove = "https://yourvault.vault.azure.net/keys/yourkey3/fd021f84a0d94d43b8ef33154bca0000"
下面是一个 ARM 模板示例,该模板在数据库级别使用用户分配的托管标识和客户管理的 TDE 更新 Azure SQL 数据库。 对于跨租户 CMK,请使用来自第二个租户密钥保管库的密钥标识符,以及来自多租户应用程序的应用程序 ID。
有关 ARM 模板的详细信息,请参阅 Azure SQL 数据库和 SQL 托管实例的 Azure 资源管理器模板 。
使用 Azure 门户中的自定义部署 ,在编辑器中生成自己的模板。 接下来,粘贴到示例中后保存配置。
若要获取用户分配的托管标识资源 ID,请在 Azure 门户 中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"server_name": {
"type": "String"
},
"database_name": {
"type": "String"
},
"user_assigned_identity": {
"type": "String"
},
"encryption_protector": {
"type": "String"
},
"location": {
"type": "String"
},
"federated_client_id": {
"type": "String"
},
"keys_to_add": {
"type": "Object"
},
"encryption_protector_auto_rotation": {
"type": "bool"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2023-02-01-preview",
"name": "[concat(parameters('server_name'), concat('/',parameters('database_name')))]",
"location": "[parameters('location')]",
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 5
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('user_assigned_identity')]": {}
}
},
"properties": {
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": 104857600,
"catalogCollation": "SQL_Latin1_General_CP1_CI_AS",
"zoneRedundant": false,
"readScale": "Disabled",
"requestedBackupStorageRedundancy": "Geo",
"maintenanceConfigurationId": "/subscriptions/e1775f9f-a286-474d-b6f0-29c42ac74554/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/SQL_Default",
"isLedgerOn": false,
"encryptionProtector": "[parameters('encryption_protector')]",
"keys": "[parameters('keys_to_add')]",
"federatedClientId": "[parameters('federated_client_id')]",
"encryptionProtectorAutoRotation": "[parameters('encryption_protector_auto_rotation')]"
}
}
]
}
encryption_protector
和 keys_to_add
参数的示例为:
"keys_to_add": {
"value": {
"https://yourvault.vault.azure.net/keys/yourkey1/fd021f84a0d94d43b8ef33154bca0000": {},
"https://yourvault.vault.azure.net/keys/yourkey2/fd021f84a0d94d43b8ef33154bca0000": {}
}
},
"encryption_protector": {
"value": "https://yourvault.vault.azure.net/keys/yourkey2/fd021f84a0d94d43b8ef33154bca0000"
}
重要
要从数据库中删除密钥,特定密钥的密钥字典值必须作为 null 传递。 例如 "https://yourvault.vault.azure.net/keys/yourkey1/fd021f84a0d94d43b8ef33154bca0000": null
。
查看 Azure SQL 数据库上的数据库级别客户管理的密钥设置
以下示例是检索数据库的数据库级别客户管理的密钥。 默认情况下,ARM 资源 Microsoft.Sql/servers/databases
仅显示在数据库上配置的 TDE 保护程序和托管标识。 要展开完整的密钥列表,请使用 -ExpandKeyList
参数。 此外,筛选器(如 -KeysFilter "current"
)和时间点值(例如 2023-01-01
)可用于检索当前使用的密钥和过去在特定时间点使用的密钥。 只有单个数据库查询支持这些筛选器,而服务器级别查询则不支持。
若要在 Azure 门户 中查看数据库级别客户管理的密钥,请转到 SQL 数据库资源的“数据加密 ”菜单。
有关安装当前版本的 Azure CLI 的信息,请参阅安装 Azure CLI 一文。
# Retrieve the basic database level customer-managed key settings from a database
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter current
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter 01-01-2015
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
az sql db list --resource-group $resourceGroupName --server $serverName
有关 Az PowerShell 模块安装说明,请参阅安装 Azure PowerShell 。 若要了解具体的 cmdlet,请参阅 AzureRM.Sql 。
使用 Get-AzSqlDatabase cmdlet。
# Retrieve the basic database level customer-managed key settings from a database
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName>
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter "current"
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter '2023-02-03 00:00:00'
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName> | Select DatabaseName, EncryptionProtector
使用适用于 Azure SQL 数据库的 2022-08-01-preview REST API。
从数据库中检索基本数据库级别客户管理的密钥设置。
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview
从数据库和所有曾经添加的密钥中检索基本数据库级别客户管理的密钥设置
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys
从数据库和当前正在使用的密钥中检索基本数据库级别客户管理的密钥设置
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('current'))
从数据库以及在特定时间点使用的密钥中检索基本数据库级别客户管理的密钥设置
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('2023-02-04T01:57:42.49Z'))
列出逻辑服务器中的所有密钥
要提取服务器下每个数据库使用的所有密钥(而不仅仅是主保护程序)的列表,必须使用密钥筛选器对其进行单独查询。 下面是一个 PowerShell 查询示例,用于列出逻辑服务器下的每个密钥。
使用 Get-AzSqlDatabase cmdlet。
$dbs = Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName>
foreach ($db in $dbs)
{
Get-AzSqlDatabase -DatabaseName $db.DatabaseName -ServerName $db.ServerName -ResourceGroupName $db.ResourceGroupName -ExpandKeyList
}
在 Azure SQL 数据库上重新验证数据库级别客户管理的密钥
如果如使用 CMK 进行透明数据加密 (TDE) 中所述无法访问 TDE 保护程序,则在更正密钥访问权限后,就可以使用重新验证密钥操作使数据库可访问。 有关示例,请参阅以下说明或命令。
使用 Azure 门户 查找 SQL 数据库资源。 选择 SQL 数据库资源后,转到“安全 ”设置下的“数据加密 ”菜单的“透明数据加密 ”选项卡。 如果数据库无法访问 Azure Key Vault,则将显示“重新验证密钥”按钮,你可以选择“重试现有密钥”来重新验证现有密钥,或者选择“选择备份密钥”来重新验证其他密钥。
有关安装当前版本的 Azure CLI 的信息,请参阅安装 Azure CLI 一文。
az sql db tde key revalidate --resource-group $resourceGroupName --server $serverName --database mySampleDatabase
使用适用于 Azure SQL 数据库的 2022-08-01-preview REST API。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revalidate?api-version=2022-08-01-preview
还原 Azure SQL 数据库上的数据库级别客户管理的密钥
如果服务器是通过服务管理的密钥配置的,则可以使用以下命令将通过数据库级别 CMK 配置的数据库还原到服务器级别加密。
若要将 Azure 门户 中的数据库级别客户管理的密钥设置恢复为服务器级别的加密密钥,请转到“数据加密 ”菜单的“透明数据加密 ”选项卡 SQL 数据库资源。 选择“服务器级别加密密钥”,然后选择“保存”以保存设置。
注意
若要对单个数据库使用“服务器级别加密密钥”设置,必须将 Azure SQL 数据库的逻辑服务器配置为使用 TDE 的“服务托管密钥”。
有关安装当前版本的 Azure CLI 的信息,请参阅安装 Azure CLI 一文。
az sql db tde key revert --resource-group $resourceGroupName --server $serverName --name mySampleDatabase
使用适用于 Azure SQL 数据库的 2022-08-01-preview REST API。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revert?api-version=2022-08-01-preview
后续步骤
查看以下有关各种数据库级别 CMK 操作的文档: