java - 如何使用 Hibernate 加密数据以防止访问列值

标签 java hibernate encryption

我使用 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/

相关文章:

java - hibernate/Dropwizard : Find or create with @UnitOfWork does not work

java - org.hibernate.exception.GenericJDBCException : Cannot open connection

Java 重写和接口(interface)

hibernate 查询 - grails

hibernate - JSE 中带有 JPA 的 EntityManager ThreadLocal 模式

java - 如何防止密码重新生成?

c# - C#混淆中字符串加密的安全性

带有salt的MySQL encrypt()在密码后接受随机字符

java - 静态初始化

java - 如何处理单例和序列化