【问题标题】:Encrypting an existing column(Always Encrypted) using script使用脚本加密现有列(始终加密)
【发布时间】:2019-06-05 03:47:32
【问题描述】:

我需要使用列加密密钥“MyCEK”以“始终加密”(确定性)加密名称列。

我不想通过向导来完成,但我需要为它编写脚本,我可以在多个服务器上运行(用于不同的环境,如 DEV、TEST、PROD)。

我已经有了创建密钥的脚本。

ALTER TABLE MyTable
ALTER COLUMN [Name] [varchar](200) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [MyCEK], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL

只是想知道我是否可以使用类似的方法更改表格 它给出了一个错误:

操作数类型冲突:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 加密的 nvarchar(max) 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'TwoValueCE', column_encryption_key_database_name = 'EmpData2') 是 与用 (encryption_type = 加密的 varchar(200) 不兼容 '确定性',加密算法名称 = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'TwoValueCE',column_encryption_key_database_name = 'EmpData2') collat​​ion_name = 'Latin1_General_BIN2'

【问题讨论】:

  • 你不能。 Always Encrypted 的全部意义在于服务器永远不会拥有密钥。然后,您不能向服务器提交纯脚本并让它执行加密操作。您必须将数据以纯文本形式从服务器中提取出来,对其进行加密,然后以加密形式将其返回给服务器,这就是为什么您只会找到Wizards之类的东西来做这种工作。
  • 使用 T-SQL 脚本 - 不,但您可以使用 PowerShell 来完成。例如。 this article.

标签: sql-server encryption always-encrypted


【解决方案1】:

看看你是否可以DROPCREATE TABLE,我运行脚本以毫无问题地创建具有加密列的新表,例如

CREATE TABLE [dbo].[Table1](
[ScannedInput] [varchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH 
(COLUMN_ENCRYPTION_KEY = [CEK_Auto2], ENCRYPTION_TYPE = Deterministic, ALGORITHM 
= 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多