You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server Always Encrypted功能存储过程变量赋值加密方案不匹配问题

问题原因

Always Encrypted 特性对加密列的读写有严格的类型匹配要求:加密列的加密类型、加密密钥、算法必须和接收其值的变量配置完全一致。你当前定义的@Salesman是普通未加密变量,无法匹配FirstName字段的加密配置,因此触发加密方案不匹配报错。

解决步骤
  • 首先查询FirstName字段的加密配置,执行如下SQL:
SELECT 
    name AS column_name,
    encryption_type_desc,
    column_encryption_key_id
FROM sys.columns 
WHERE object_id = OBJECT_ID('CommonContacts') AND name = 'FirstName'
  • 根据查询到的配置,重新定义@Salesman变量,补充加密配置参数:
-- 以下配置参数需和你查询到的FirstName列配置完全一致
DECLARE @Salesman AS NVARCHAR (max)
ENCRYPTED WITH (
    COLUMN_ENCRYPTION_KEY = [你实际使用的列加密密钥名称],
    ENCRYPTION_TYPE = DETERMINISTIC, -- 可替换为RANDOMIZED,和查询结果的encryption_type_desc一致即可
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
);

IF @SalesmanNumber > 0
    BEGIN
        SELECT @Salesman = FirstName
        FROM   CommonContacts
        WHERE  CompanyNumber = @CompanyNumber
               AND ContactNumber = @SalesmanNumber;
    END
注意事项
  • 操作时需要保证数据库连接已经开启列加密支持:如果是SSMS执行,需要在连接选项的「其他参数」中添加Column Encryption Setting=Enabled;如果是应用程序连接,需要在连接字符串中追加同样的配置项。
  • 加密后的变量无法在SQL Server服务端执行拼接、模糊匹配、运算等操作,所有明文层面的处理必须在持有主密钥的客户端完成。

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:03