更改加密密钥后,Microsoft Java JDBC驱动程序找不到Azure Always Encrypted列加密密



我使用的是带有Spring Framework的Java,通过Microsoft JDBC驱动程序连接到SQL数据库。

数据库中的一个表具有使用Azure Always encrypted加密的列。我最近更改了列的加密密钥(用旧密钥解密的数据,用新密钥加密的数据(,尽管Java服务使用经过身份验证的客户端来访问这两个列加密密钥,但我在Java应用程序中得到了消息:

SQL错误:33294,SQL状态:S0004

com.microsoft.sqlserver.jdbc.SQLServerException:某些参数或批处理的列需要加密,但相应的找不到列加密密钥。使用sp_refresh_parameter_encryption刷新模块参数元数据。

我尝试过重新部署服务,但没有成功。我也尝试运行过程sp_refresh_parameter_encryption,但它需要一个模块或一个存储过程作为参数,而且我看不到任何明显的存储过程可以提供给它

我发现一个或多个过程是使用旧列加密密钥缓存的。通过运行查询

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

缓存被清除,新密钥被加载,一切都很顺利。

最新更新