我使用 Hibernate 开发了一个 Java 网络服务来连接数据库。用户将存储任何人都不应该直接访问的数据,即使是从数据库中也是如此。
是否有可能为每个用户生成一个 key 来加密/解密数据库中的数据。如何在一组用户之间共享访问权限?
如何使用 Hibernate 实现?
最佳答案
关于通过Hibernate在数据库中存储加密内容建议大家花点时间研究一下Hibernate Encryption of Database Completely Transparent to Application .它提出了多种选择:
- 使用 JDBC-over-SSL 代替普通的 JDBC 连接(应用程序和数据库之间没有流量嗅探)
- 不要加密数据库中的特定内容,而是使用 TrueCrypt 之类的东西加密存储数据的硬盘
- 使用自定义 Hibernate
UserType
,它可以即时加密/解密数据(即,您可以使用EncryptedString
而不是String
)
前两个通常优于您似乎尝试的原因是引用自另一个问题
bear in mind that any solution with client-side encryption will render all your db data unusable outside of the client, ie, you will not be able to use nice tools like a jdbc client or MySQL query browser, etc.
但是,如果仍想使用自定义 Hibernate UserType
即时加密/解密数据,我建议评估 Jasypt Hibernate integration它提供了这样的类型。
关于java - 如何使用 Hibernate 加密数据以防止访问列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22592366/