Sql server 如何通过powershell关闭数据库加密

Sql server 如何通过powershell关闭数据库加密,sql-server,powershell,encryption,azure-sql-database,Sql Server,Powershell,Encryption,Azure Sql Database,我已经设置了一个TDE加密的数据库。现在我需要通过PowerShell禁用此加密。我能够取得一些突破,但面临以下错误 错误:无法删除数据库加密密钥,因为它当前正在使用。需要关闭数据库加密才能删除数据库加密密钥。然而,我相信加密密钥会被关闭,但密钥会被丢弃。 下面是第一次运行代码后的屏幕截图 看起来您可以使用Azure PowerShell cmdletSet AzureRMSqlDatabaseTransparentDataEncryption来执行以下操作: 使用PowerShell在SQL

我已经设置了一个TDE加密的数据库。现在我需要通过PowerShell禁用此加密。我能够取得一些突破,但面临以下错误

错误:无法删除数据库加密密钥,因为它当前正在使用。需要关闭数据库加密才能删除数据库加密密钥。然而,我相信加密密钥会被关闭,但密钥会被丢弃。 下面是第一次运行代码后的屏幕截图


看起来您可以使用Azure PowerShell cmdlet
Set AzureRMSqlDatabaseTransparentDataEncryption
来执行以下操作:

使用PowerShell在SQL数据库上启用和禁用TDE

使用Azure PowerShell,您可以运行以下命令来打开 TDE开/关。您必须先将帐户连接到PS窗口,然后才能 运行命令。自定义示例以使用您的值 ServerName、ResourceGroupName和DatabaseName参数。对于 有关PowerShell的其他信息,请参阅

要禁用TDE,请执行以下操作:

Set-AzureRMSqlDatabaseTransparentDataEncryption -ServerName "myserver" -ResourceGroupName "Default-SQL-WestUS" -DatabaseName
“数据库1”-状态为“已禁用”

如果使用版本0.9.8,请使用
设置AzureSqlDatabaseTransparentDataEncryption
命令


来源:

你很接近。将
EncryptionEnabled
设置为false后,需要执行
$ExistingDB.Alter()
命令服务器实际执行此操作。完成此操作后,可以使用已有的命令安全地删除数据库加密密钥

完整脚本:

$sqlServer = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sqlName
$ExistingDB=$sqlServer.Databases.Item($dbname) 
$ExistingDB.EncryptionEnabled=$false
$ExistingDB.Alter()
$ExistingDB.DatabaseEncryptionKey.Refresh()
$ExistingDB.DatabaseEncryptionKey.Drop() #should work now

是否存在任何事件侦听器来识别数据库解密的完成情况,因为数据库很大,需要在解密完成后自动备份。看起来您在此处提出了一个实际问题:。这里提供了答案。我再次修改了这个问题。你能研究一下吗。如果你有一个大型数据库,我可以看到在alter数据库和何时可以删除加密密钥之间需要花费大量时间的情况(因为即使您声明希望对数据库进行解密,所有数据都需要时间才能真正解密)。根据您的其他问题,您可以通过多种方式检查转换的进度。好的。我使用的是您在小型数据库[210 MB]上指定的上述代码对于解密过程,仍然面临以下问题“无法删除数据库加密密钥,因为它当前正在使用。需要关闭数据库加密才能删除数据库加密密钥”Set-AzureRMSqlDatabaseTransparentDataEncryption不是可识别的cmdlet,您能告诉我要包含哪个包吗?我相信它是AzureRM模块的一部分
$sqlServer = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sqlName
$ExistingDB=$sqlServer.Databases.Item($dbname) 
$ExistingDB.EncryptionEnabled=$false
$ExistingDB.Alter()
$ExistingDB.DatabaseEncryptionKey.Refresh()
$ExistingDB.DatabaseEncryptionKey.Drop() #should work now