【问题标题】:Azure Always Encrypted column encryption key cannot be found by Microsoft JDBC driver for Java after changing encryption key更改加密密钥后,Microsoft JDBC driver for Java 找不到 Azure Always Encrypted 列加密密钥
【发布时间】:2018-12-11 15:01:54
【问题描述】:

我正在使用带有 Spring Framework 的 Java,通过 Microsoft JDBC Driver 连接到 SQL 数据库。

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

SQL 错误:33294,SQLState:S0004

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

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

【问题讨论】:

    标签: java sql-server spring mssql-jdbc always-encrypted


    【解决方案1】:

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

    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

    缓存已清除,新密钥已加载,一切正常。

    【讨论】:

    • 刚刚注意到这也解决了我一年后在 Java Spring 服务中遇到的另一个问题。将列的加密类型从 RANDOMIZED 更改为 DETERMINISTIC 后,我的 Java 代码开始出现以下错误:Operand type clash: nvarchar(6) encrypted with (encryption_type = 'DETERMINISTIC', ...) is incompatible with nvarchar(12) encrypted with (encryption_type = 'RANDOMIZED', ...)。重新启动服务没有做任何事情,但是用答案中的查询清除 PROCEDURE_CACHE 解决了这个问题。
    猜你喜欢
    • 2020-06-03
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2021-11-26
    • 2012-02-17
    • 2014-08-28
    相关资源
    最近更新 更多