如何从SQL Server 2016中的列中删除加密属性?
我使用SQL Server Management Studio 2016中的“始终加密”向导启用了此功能,但我想从之前添加的某些列中删除加密。
我想知道以下两件事是否可能(如果是这样的话:怎么样?):
答案 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脚本解密列的示例。在此处阅读文档:
示例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