由于 Key Vault 软删除,Set-AzureRmSqlDatabase 命令在降低 Azure SQL 数据库定价层时失败

Set-AzureRmSqlDatabase command is failing while lowering the Azure SQL DB pricing tier due to key vault soft delete

我正在使用自动 powershell 脚本来降级数据库备份副本的定价层。在提供以下命令时,层级降级失败。如果我理解正确的话,错误是指密钥库的密钥与我的服务器名称相同,因为不存在这样的密钥(因此也不能启用软删除),此命令失败。

当我的应用程序没有设置 key-vault 并且现在似乎失败时,命令已经设置。

使用的命令:

Set-AzureRmSqlDatabase -DatabaseName <*Back-up DB name*> -ServerName <*SQL server name*> -ResourceGroupName <*Resource Group name*> -Edition Standard -RequestedServiceObjectiveName S0

错误:

Set-AzureRmSqlDatabase : 45377: The provided Key Vault uri 'https://****.vault.azure.net/keys/<SERVERNAME>/<Subscription/some ID> is not valid. Please ensure the key vault has been configured with soft-delete. (https://aka.ms/sqltdebyoksoftdelete) At line:1 char:2 + Set-AzureRmSqlDatabase -DatabaseName <Back-up DB name> -ServerName <SQL server name>... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmSqlDatabase], CloudException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Sql.Database.Cmdlet.SetAzureSqlDatabase

问题:
1.Why Set-AzureRmSqlDatabase 命令在未明确提及时指的是密钥保管库 URI?

2.Is 我们需要在 server/DB 级别设置一个选项,以允许此命令直接读取 server/DB 名称,而不是搜索具有服务器名称的密钥?

  1. 这是否与透明数据加密有关?

  2. 如果密钥库晚于 application/DB/key-vault 设置,我们是否应该对此命令进行任何更改?

这里有一些个人的看法,供大家参考。

首先,根据我的测试,该命令在我这边运行良好。

注意:在我的测试环境中,它是一个sql服务器和数据库,没有任何其他东西,比如透明数据加密。

Set-AzureRmSqlDatabase -DatabaseName joydatabase -ServerName joydb -ResourceGroupName joywebapp -Edition Standard -RequestedServiceObjectiveName S0

Why Set-AzureRmSqlDatabase command is referring to a key-vault URI, when not mentioned explicitly ?

在我这边,我通过 fiddler 捕获请求,它不是指密钥库 URL,请参考屏幕截图。

Is there a option we need to set at the server/DB level to allow this command to read the server/DB name directly rather than searching for a key with server name?

在我这边,我认为我们不需要这样做。

Is this anywhere related to Transparent data encryption ?

我觉得跟它有关的可能性很大。您可以创建一个新的 sql 服务器和数据库来试一试。这里有一篇关于 azure sql 服务器透明数据加密的文章,你可以参考 it.

Are we suppose to make any changes to this command if the key-vault comes later than the application/DB/key-vault set-up ?

我认为这条命令似乎没有任何改变。

我认为这个问题纯粹与TDE(透明数据加密)有关。由于 Azure SQL 数据库受 TDE 保护,因此预计密钥库也应启用软删除以恢复任何已删除的密钥。
在尝试启用软删除时,我发现我机器上安装的 Azure powershell 不支持软删除 属性.

我可以通过以下步骤解决此问题:

  1. 升级的 powershell: Installation Package

  2. 登录您的 Azure 订阅并运行执行此命令

    $vault = Get-AzureRmKeyVault -VaultName myvault; $vault.EnableSoftDelete

  3. 如果上述方法不起作用 运行 下面的命令。这将找到密钥库的 resourceId,然后将启用软删除 -

($resource = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -VaultName "YourKeyVaultNameHere").ResourceId).Properties | Add-Member - MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"

Set-AzureRmResource -resourceid $resource.ResourceId -Properties $resource.Properties

  1. 验证是否通过以下命令启用了 key-vault 软删除

Get-AzureRmKeyVault -VaultName "YourKeyVaultNameHere"

希望这对面临类似问题的人有所帮助。