Hibernate对具有加密列的表进行审核

时间:2018-06-28 14:12:45

标签: hibernate spring-data-jpa audit hibernate-envers

我们已经为我们的一张表实施了Hibernate envers审核(@audited),并且一切正常。但是在表中,我们正在使用对称密钥加密逻辑对某些字段进行加密,而在我们的实体中,我们包括了@column传输以进行读写操作。

在这里,每当我们首先执行任何CRUD操作时,我们都会编写一个本机查询来打开对称密钥,并且一旦完成CRUD操作,我们便会关闭它。如果未打开对称密钥,则该值为null。在我们的“审核”表中,除了那些已加密的列之外,所有值都将被审核。

因此,根本原因是当hibernate创建一个要插入审计表的查询时,它没有打开对称密钥,因此值被存储为null。

简而言之,在休眠执行对审计表的任何插入之前,有任何方法可以打开对称密钥,一旦完成插入,就需要关闭对称密钥

我们正在使用带有Spring JPA的hibernate envers版本5.0.12

@Entity
@Table(name = "CUSTOMER")
@Audited
public class Customer {
    @Id
    @GeneratedValue
    @Column(name = "CUSTOMER_ID")
    private long customerId;


    @Column(name = "USERNAME")
    private String userName;


    @Column(name = "FIRST_NAME")
    @ColumnTransformer(
            read = "CONVERT(VARCHAR(50), DecryptByKey(FIRST_NAME))",
            write = "EncryptByKey (Key_GUID('DBSymKey'), ?)")
    private byte[] firstName;

    @Column(name = "LAST_NAME")
    @ColumnTransformer(
            read = "CONVERT(VARCHAR(50), DecryptByKey(LAST_NAME))",
            write = "EncryptByKey (Key_GUID('DBSymKey'), ?)")
    private byte[] lastName;

}

0 个答案:

没有答案