【问题标题】:Configure Always Encrypted for existing column through t-sql通过 t-sql 为现有列配置 Always Encrypted
【发布时间】:2018-10-31 15:06:34
【问题描述】:

我有一个场景,我需要通过“始终加密”来加密一些现有的列,但我需要通过 t-Sql 脚本来做(测试的脚本需要在生产环境中执行)。这怎么可能?

类似下面

ALTER TABLE testTable ALTER COLUMN StringColumn  NVARCHAR(20) COLLATE
Latin1_General_BIN2  ENCRYPTED WITH (
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_Auto4)

但是,上面的代码抛出如下错误

操作数类型冲突:nvarchar 与 nvarchar(20) 不兼容 用 (encryption_type = 'DETERMINISTIC', 加密算法名称 = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEKName', column_encryption_key_database_name = 'DBName')

注意:我没有执行 PowerShell 脚本的规定。我已经有了生成密钥的 t-SQL 脚本

【问题讨论】:

  • 生成原始 SQL 的一种方法是使用向导进行操作,并使用通常位于窗口右上角的选项(?)按钮。
  • 应该在您使用Secure Enclaves 功能升级到 2019 年之后成为可能。他们使用此功能的第一个示例是“您可以使用 ALTER TABLE Transact-SQL 语句发出就地加密”
  • 您使用的 SSMS 版本是什么?
  • 我只有2017版...
  • @dfundako sql server 2017 中是否存在此功能..?

标签: sql-server sql-server-2017 always-encrypted


【解决方案1】:

您不能这样做,因为 SQL Server 无法解密和加密您的数据。这只能发生在客户端(应用程序、SSMS、PowerShell)。本质上,您必须添加新的加密列并从现有列中复制未加密的数据。请注意,这不能通过执行简单的“update table set encrypted_column = unencrypted_column”T-SQL 语句来完成,因为 SQL Server 无法加密/解密数据。因此,要么您必须在应用程序级别执行此操作,要么运行 SSMS 向导并将进程保存为 PowerShell 脚本,稍后您可以在生产服务器上运行该脚本。

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2017-04-23
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多