sql-server - SQL Server:始终加密的存储过程 - 列/变量的加密方案不匹配
问题描述
由于英国的法规变化,我们正在更改我们的数据库,以便在我们所有的个人可识别和潜在敏感数据上使用 Always Encrypted。
在所有加密发生后尝试运行存储过程时,我收到以下错误。
列/变量“@FilePath”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'xxxxx') 并且行 '19' 附近的表达式期望它是 (encryption_type = ' PLAINTEXT')(或更弱)。
因此,当调查这一点并注释掉 SP 创建和运行的违规行时,它是“正常的”。
很好,它现在具有不正确的值。
有问题的 SQL 是:
select @FilePath = ParameterValue from Parameter where ParameterCode = 'EXPORT_PATH'
所以,我把这条线拉到它自己的 SQL 中,而不是在 SP 中,让它像这样工作。
DECLARE @FilePath VARCHAR(8000) = '',
@ParameterCode varchar(50) = 'EXPORT_PATH'
SELECT @FilePath = ParameterValue from Parameter where ParameterCode = @ParameterCode
SELECT @FilePath
但是,当我将它包装成一个 SP 时,它可以完美地工作
CREATE PROCEDURE SIMONTEST
AS
BEGIN
DECLARE @FilePath VARCHAR(8000) = '',
@ParameterCode varchar(50) = 'EXPORT_PATH'
SELECT @FilePath = ParameterValue from Parameter where ParameterCode = @ParameterCode
SELECT @FilePath
END
GO
我得到错误
消息 156,级别 15,状态 1,第 1 行关键字“PROCEDURE”附近的语法不正确。消息 8180,级别 16,状态 1,过程 sp_describe_parameter_encryption,第 1 行 [批处理开始第 0 行]
无法准备报表。
执行批处理时出错。错误信息是:内部错误。Metadata for parameter '@p411c14c506c74dc690baf9ef724f7409' in statement or procedure 'CREATE PROCEDURE SIMONTEST AS BEGIN DECLARE @FilePath AS VARCHAR (8000) = @p411c14c506c74dc690baf9ef724f7409, @ParameterCode AS VARCHAR (50) = @p9f3729b1d64742cf858ff9edb30a5d71; SELECT @FilePath = ParameterValue FROM Parameter WHERE ParameterCode = @ParameterCode; 选择@文件路径;结尾
' 在 sp_describe_parameter_encryption 返回的结果集中缺失。
如果有人能帮助我理解这个问题并帮助我解决这个问题,我将不胜感激。
解决方案
我不能确切地说出它为什么或如何工作,但在这里它对我有用
首先,我为 sproc 的 WHERE 子句中涉及的列禁用了加密(又名在 SSMS Always Encrypted 列加密对话框窗口中将 PLAINTEXT 设置为加密方法)
其次,我仅针对我需要执行的特定 ALTER 或 CREATE 禁用了 SSMS 中的参数化查询选项。您可以在查询 > 查询选项 > 执行 > 高级下找到它
第三,我修改/创建了我的 sproc,注意正确参数化 WHERE 子句的变量,以免比较运算符不兼容
第四,在没有您报告的错误的情况下执行创建/更改查询后,我重新启用了列加密方式。
Sprocs 最终执行得很好,而且(它需要进一步测试)似乎后续更改不需要上述步骤。但正如我所说,我不确定这一点。明天我再试一次。
推荐阅读
- asp.net-core - 使用 JQuery 数据表时单击事件在 Blazor 中不起作用
- python - 在 While 循环错误中更新数据框:仅整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组有效
- css - 内联 CSS 样式不会覆盖与 WooCommerce 产品价格相呼应的内部样式
- r - 如何手动更改 R Shiny 中单选按钮的选定值?
- python - 如何使用实际数据计算 SIR 模型中的感染率、康复率和疫苗接种率?
- python - 尝试从 Pygame 中的 Numpy 数组将图像blit到屏幕上时出现KeyError
- ansible - 从上一个任务中获取更改/失败的主机列表 | Ansible
- python - python可变和可散列类型
- flutter - 是否可以在颤动中实现边缘照明通知?
- python - student() 没有参数错误。我试图检查一切,任何人都可以帮我解决它