gpt4 book ai didi

java - 使用 Hibernate 查询 SQL Server 2005 加密列的 Web 应用程序

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:28 25 4
gpt4 key购买 nike

我们正在使用 Spring 3.1.2 和 Hibernate 4.1.7 以及数据库 SQL Server 2005 开发一个网络应用程序。

在一个表上,我们有一个加密的列,我们需要执行一些查询,例如,这个:

OPEN SYMMETRIC KEY PasswordFieldSymmetricKey
DECRYPTION BY PASSWORD = 'myPassword'

SELECT id,
plain,
cipher,
CONVERT(varchar(50),
DecryptByKey(cipher)) AS 'Decrypted'
FROM TS_OWN.cryptest;

GO
CLOSE SYMMETRIC KEY PasswordFieldSymmetricKey

作为解决方案,someone建议创建一个管理解密的 View ,但我们需要任何人都不能看到解密的数据,当然,例如 DBA 可以查询该 View 。

同时,我们不想在 Java 端执行解密,因为由于性能原因需要数据库引擎执行一些繁重的聚合逻辑。

一种可能的解决方案是创建一个 View ,该 View 执行解密、聚合,然后再次加密结果,在 Java 端对聚合值执行解密。

有人知道其他选择吗?

谢谢大家卢卡

最佳答案

从服务器端的角度来看,最透明的解决方案是使用Jasypt。 .这个库带有几个用于加密文本/密码字段的 Hibernate 用户类型。

如引用文档中所述,存在局限性:

But encryption sets a limitation on your Hibernate usage: security standards establish that two different encryption operations on the same data should not return the same value (due to the use of a random salt). Because of this, none of the fields that are set to be encrypted when persisted can be a part of a WHERE clause in your search queries for the entity they belong to.

虽然您的 HQL/SQL 查询会隐藏解密的复杂性,但您不会获得与特定数据库解密函数相同的性能。

使用数据库解密函数性能更好,但是您所有的查询都将嵌入到 View 中,这将显着改变您使用 Hibernate 的方式。

你可以映射 entities to views相反,但您必须注意 DML 语句(一些数据库提供 updatable views ,其他数据库为您提供物化 View ,或者您可能会使用 INSTEAD OF 触发器)。

OPEN/CLOSE SYMETRIC 的一种可能解决方案是使用您自己的@Decrypt 注释并添加一个方面以在事务开始之后和结束之前插入这些方面。这将起作用,因为 sql session /连接绑定(bind)到当前事务/线程。

关于java - 使用 Hibernate 查询 SQL Server 2005 加密列的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16670587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com