如何从Sql Server 2016中的列中删除Always Encrypted

时间:2017-05-09 19:45:41

标签: sql-server encryption sql-server-2016

如何从SQL Server 2016中的列中删除加密属性?

我使用SQL Server Management Studio 2016中的“始终加密”向导启用了此功能,但我想从之前添加的某些列中删除加密。

我想知道以下两件事是否可能(如果是这样的话:怎么样?):

  1. 使用用于加密的证书真正撤消加密。
  2. 删除加密并将加密数据保留在单元格中。

4 个答案:

答案 0 :(得分:3)

问题1)的答案是再次运行Always Encrypted向导并选择“Plaintext”作为加密类型。

附注:我必须删除位列上的默认值约束,以使向导完成且没有错误。

答案 1 :(得分:1)

上述建议有点过于简单,可能会让您在未来遇到问题。首先启用列上的“始终加密”会将该列的排序规则更改为其中一个Binary2排序规则,然后返回到明文不会将列返回到正确的排序规则。如果您尝试进行某些比较,可能会出现整理问题。 接下来,您已经离开了主密钥和加密密钥。也许你想保留它们也许不是。但要为Msg 8180,Level 16,State 1,Procedure sp_describe_parameter_encryption,Line 1 [Batch Start Line 0]等奇怪错误做好准备 声明无法准备。如果你不想总是加密除掉所有这些,而不仅仅是可见的一块。我从一个在数据库上启用了Always Encrypted的服务器上收到了该错误。但我没有在那个数据库上工作。我正在处理的数据库没有启用加密。

答案 2 :(得分:0)

您还应该检查您的tempdb。是加密的,例如从sys.databases中选择is_encrypted。

答案 3 :(得分:0)

PowerShell是执行此操作的最佳方法。您可以动态加密和解密列。首先,通过右键单击表并选择“加密列”来启动“始终加密”向导。接下来,浏览向导,直到获得“运行设置”。在这里,您可以选择生成ps脚本并将其保存。复制该脚本。一个将是用于解密列的脚本,另一个是用于加密列的脚本。在文本编辑器中打开脚本,然后根据需要进行编辑。在PowerShell中执行。我在下面提供了一个有关如何使用已编辑的PowerShell脚本解密列的示例。在此处阅读文档:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/configure-column-encryption-using-powershell?view=sql-server-ver15

示例PowerShell脚本解密两列

#由SQL Server Management Studio在2020年5月14日下午4:41生成

导入模块SqlServer #设置连接和数据库SMO对象

#$ password =“您的密码”

$ sqlConnectionString =“数据源= BLAH \ MSSQL2014;初始目录= BLAHDB;用户ID = sa;密码= $ password; MultipleActiveResultSets = False;连接超时= 30;加密= False; TrustServerCertificate = False;数据包大小= 4096 ;应用程序名称= {"Microsoft SQL Server Management Studio“”“ $ smoDatabase = Get-SqlDatabase -ConnectionString $ sqlConnectionString

##如果您的加密更改涉及Azure Key Vault中的密钥,请取消注释以下行之一以进行身份​​验证: #*提示输入用户名和密码: #Add-SqlAzureAuthenticationContext-交互式

#*输入客户端ID,机密和租户ID: #Add-SqlAzureAuthenticationContext -ClientID''-秘密''-租户''

#Change加密架构

$ encryptionChanges = @()

#为表[dbo]添加更改。[blah_table]

$ encryptionChanges + = New-SqlColumnEncryptionSettings -ColumnName dbo.blah_table.field1 -EncryptionType纯文本 $ encryptionChanges + = New-SqlColumnEncryptionSettings -ColumnName dbo.blah_table.field2 -EncryptionType纯文本

Set-SqlColumnEncryption -ColumnEncryptionSettings $ encryptionChanges -InputObject $ smoDatabase