通过T-SQL为现有列配置始终加密

时间:2018-10-31 15:06:35

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

我有一个场景,我需要通过“始终加密”对几个现有列进行加密,但是我需要通过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',   encryption_algorithm_name ='AEAD_AES_256_CBC_HMAC_SHA_256',   column_encryption_key_name ='CEKName',   column_encryption_key_database_name ='DBName')

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

1 个答案:

答案 0 :(得分:0)

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