我有一个场景,我需要通过“始终加密”对几个现有列进行加密,但是我需要通过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脚本
答案 0 :(得分:0)
您不能这样做,因为SQL Server无法解密和加密您的数据。这只能在客户端(应用程序,SSMS,PowerShell)上发生。本质上,您必须添加新的加密列并从现有列中复制未加密的数据。请注意,这不能通过执行简单的“更新表集:encrypted_column = unencrypted_column” T-SQL语句来完成,因为SQL Server无法加密/解密数据。因此,您必须在应用程序级别执行此操作,或者运行SSMS向导并将该过程保存为PowerShell脚本,以后可以在生产服务器上运行该脚本。