Hibernate включает аудит для таблиц с зашифрованным столбцом - PullRequest
0 голосов
/ 28 июня 2018

Мы внедрили аудит Hibernate (@audited) для одной из наших таблиц, и все работает нормально, как и ожидалось. Но в таблице мы шифруем некоторые поля с использованием логики шифрования симметричного ключа, и в нашу сущность мы включили передачу @column для операций чтения и записи.

Здесь всякий раз, когда мы сначала выполняем какую-либо операцию CRUD, мы напишем собственный запрос, чтобы открыть симметричный ключ, и как только операция CRUD будет завершена, мы закроем ее. Если симметричный ключ не открыт, то значение будет нулевым. В нашей таблице Audit проверяется каждое значение, кроме тех столбцов, которые зашифрованы.

Таким образом, основная причина заключается в том, что когда hibernate создает запрос для вставки в таблицу аудита, он не открывает симметричный ключ и, следовательно, значение сохраняется как ноль.

Короче говоря, есть ли способ открыть симметричный ключ до того, как hibernate выполнит любую вставку в таблицу аудита, и после того, как вставка будет завершена, ключ должен быть закрыт

Мы используем hibernate envers версии 5.0.12 с пружиной JPA

@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;

}
...