【问题标题】:How to remove Always Encrypted from a column in SQL Server 2016如何从 SQL Server 2016 中的列中删除 Always Encrypted
【发布时间】:2017-05-09 19:45:41
【问题描述】:

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

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

我想知道以下 2 件事是否可能(如果可以,如何实现?):

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

【问题讨论】:

  • Ummm.....#2 甚至没有任何意义。根据定义,删除加密意味着该值将不再被加密。
  • 当然可以。就 sql server 而言,只存储了 (n) varchars。我想知道您是否可以删除“始终加密”标志,或者这样做可以使例如实体框架仅接收此加密数据并且不会使用配置的证书。

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


【解决方案1】:

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

旁注:我必须删除位列上的默认值约束,以使向导完整无误。

【讨论】:

  • 对于文本列,您还必须将排序规则设置回数据库默认值。
【解决方案2】:

上述建议有点简单,可能会让您在以后遇到问题。首先在列上启用 Always Encrypted 会将该列的排序规则更改为 Binary2 排序规则之一,并且移回明文不会将该列返回到正确的排序规则。如果您尝试一些比较,您可能会遇到排序问题。 接下来,您留下了主密钥和加密密钥。也许你想保留它们也许不是。但是要为奇怪的错误做好准备,例如 Msg 8180, Level 16, State 1, Procedure sp_describe_parameter_encryption, Line 1 [Batch Start Line 0] 无法准备报表。如果您不希望 Always Encrypted 摆脱所有这些,而不仅仅是可见的部分。我从在数据库上启用了 Always Encrypted 的服务器收到该错误。但我没有在那个数据库上工作。我正在处理的数据库没有启用加密。

【讨论】:

    【解决方案3】:

    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;Encrypt=False;TrustServerCertificate=False;数据包大小=4096 ;应用程序名称="Microsoft SQL Server Management Studio"" $smoDatabase = Get-SqlDatabase -ConnectionString $sqlConnectionString

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

    #* 输入客户端 ID、机密和租户 ID: #Add-SqlAzureAuthenticationContext -ClientID '' -Secret '' -Tenant ''

    #更改加密架构

    $encryptionChanges = @()

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

    $encryptionChanges += New-SqlColumnEncryptionSettings -ColumnName dbo.blah_table.field1 -EncryptionType Plaintext $encryptionChanges += New-SqlColumnEncryptionSettings -ColumnName dbo.blah_table.field2 -EncryptionType Plaintext

    Set-SqlColumnEncryption -ColumnEncryptionSettings $encryptionChanges -InputObject $smoDatabase

    【讨论】:

      【解决方案4】:

      您还应该检查您的 tempdb。它是加密的吗?从 sys.databases 中选择 is_encrypted。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-24
        相关资源
        最近更新 更多