Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Hibernate加密数据以防止访问列值_Java_Hibernate_Encryption - Fatal编程技术网

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

Java 如何使用Hibernate加密数据以防止访问列值,java,hibernate,encryption,Java,Hibernate,Encryption,我使用Hibernate开发了一个JavaWeb服务来连接数据库。用户将存储任何人都不应直接访问的数据,即使是从数据库中 是否有可能为每个用户生成加密/解密数据库中数据的密钥。如何在一组用户之间共享访问权限 如何使用Hibernate?至于通过Hibernate在数据库中存储加密内容,我建议您投入一些时间进行研究。它提出了一些选择: 使用JDBC over SSL代替普通的JDBC连接(应用程序和数据库之间没有流量嗅探) 与其加密数据库中的特定内容,不如使用类似于加密存储数据的硬盘驱动器的内容

我使用Hibernate开发了一个JavaWeb服务来连接数据库。用户将存储任何人都不应直接访问的数据,即使是从数据库中

是否有可能为每个用户生成加密/解密数据库中数据的密钥。如何在一组用户之间共享访问权限


如何使用Hibernate?至于通过Hibernate在数据库中存储加密内容,我建议您投入一些时间进行研究。它提出了一些选择:

  • 使用JDBC over SSL代替普通的JDBC连接(应用程序和数据库之间没有流量嗅探)
  • 与其加密数据库中的特定内容,不如使用类似于加密存储数据的硬盘驱动器的内容
  • 使用自定义Hibernate
    UserType
    s动态加密/解密数据(即,您将使用
    EncryptedString
    而不是
    String
前两个问题通常优于您尝试的问题的原因是引用了另一个问题

请记住,使用客户端加密的任何解决方案都会 您的所有数据库数据在客户端之外都不可用,即您将无法访问 能够使用好的工具,如jdbc客户端或MySQL查询浏览器等

但是,如果仍然希望使用自定义Hibernate
UserType
s动态加密/解密数据,我建议对提供此类类型的进行评估。

透明加密/解密 如果您的数据库支持透明加密/解密,那么这可能是最好的选择

茉莉花 另一个选项是使用您可以使用的,它提供了多种Hibernate类型来加密/解密数据

使用
@ColumnTransformer
加密/解密实体属性的一种非常简单的方法是使用如下所示的

@ColumnTransformer(
    read = """
        pgp_sym_decrypt(
            storage,
            current_setting('encrypt.key')
        )
        """,
    write = """
        pgp_sym_encrypt(
            ?,
            current_setting('encrypt.key')
        )
        """
)
@Column(columnDefinition = "bytea")
private String storage;

这样,Hibernate将能够在您访问实体属性时对其进行加密,并在获取实体时对其进行解密。

管理员也不应该访问数据(这意味着不知道用户存储的具体内容)。因此,我的建议是使用Jasypt?如果您能够承担并接受此解决方案的后果,那么可以使用Jasypt(或自定义
UserType
s)。