Мы внедрили аудит 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;
}