在 WHERE 子句中使用 Always Encrypted 列时出现消息 33299,级别 16

Msg 33299, Level 16 when using Always Encrypted Column in WHERE Clause

我有一个名为 table 的产品,它有一个名为 Code varchar(50) 的字段。

我在这个字段上使用了 Always EncryptedInsert 和正常 select 工作正常。

但是,当我尝试使用 Code 字段上的 WHERE 子句为 select 创建一个存储过程时,它显示错误并且不允许我创建该过程。我的程序代码如下:

CREATE PROCEDURE [dbo].[GetProductByCode]
@productCode VARCHAR (50)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  id,
        [Name],
        Code,
        Price
    FROM   Product
    WHERE Code = @productCode;
END

显示的错误如下:

Msg 33299, Level 16, State 2, Procedure GetProductByCode, Line 11 [Batch Start Line 0] Encryption scheme mismatch for columns/variables '@productCode', 'Code'. The encryption scheme for the columns/variables is (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto2', column_encryption_key_database_name = 'xxxx') and the expression near line '11' expects it to be (encryption_type = 'DETERMINISTIC') (or weaker).

为什么不允许我创建程序?

我尝试在连接中设置 Column Encryption Setting=Enabled。

已选中启用始终加密的参数化。

参考这个document

Columns using randomized encryption are not supported in clauses at all

本例中的列 code 进行了 随机加密 。 此加密类型应仅用于仅用于显示而非查询的列。

因此,如果您想使用列 code 进行查询,请将其加密类型更改为 Deterministic.

使用确定性加密的列支持 WHERE 相等比较,以及 DISTINCTJOINGROUP BY

您不能对加密列执行不等式、范围或 LIKE 查询,或任何其他操作。

也看看this