【发布时间】:2019-07-31 11:52:59
【问题描述】:
下面是table和insert的脚本
CREATE TABLE [dbo].[registration]
(
[Email] [VARCHAR](MAX) NULL,
[Name] [VARCHAR](MAX) NULL,
[Address] [VARCHAR](MAX) NULL
) ON [PRIMARY]
GO
INSERT INTO registration
VALUES ('sample1@test.com', 'Sample1', 'New Jersey'),
('sample2@test.com', 'Sample2', 'New York'),
('sample3@test.com', 'Sample3', 'Chicago');
通过创建始终加密密钥(列主密钥和列加密密钥),在电子邮件字段上启用列级加密。使用“启用始终加密”登录 SSMS
创建了这个存储过程:
CREATE PROCEDURE prod_getregistration
@Email VARCHAR(MAX)
AS
BEGIN
SELECT *
FROM registration
WHERE Email = @Email
END
prod_getregistration 'sampletest@test.com'
执行程序时,我得到这个错误:
操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'MY_CEK', column_encryption_key_database_name = 'Sample') 加密的 varchar(max) 不兼容 collation_name = 'SQL_Latin1_General_CP1_CI_AS >
where 子句是否可以用于加密列?
【问题讨论】:
-
我不得不问,你为什么使用
varchar(MAX)来存储姓名、地址和电子邮件之类的东西?我怀疑世界上是否有人名字中有 2147483648 个字符。 -
所有字段都已加密,我想确保大小不会导致此错误,这就是我给出 varchar(max) 的原因,无论如何,谢谢。
标签: sql-server encryption