2013-06-04 14 views
10

Mam kolumnę bazy danych, która musi zostać zaszyfrowana po przesłaniu z aplikacji internetowej hibernacji. Aplikacja webowa znajduje się na tomcat 6, Hibernate 4 i Mysql jako zaplecze.Hibernuj - Przechowuj kolumnę jako zaszyfrowaną i odszyfruj tylko w środowisku wykonawczym

Problem polega jednak na tym, że hasło do szyfrowania/odszyfrowania tego pola będzie dostępne tylko w czasie wykonywania programu. Początkowo miałem nadzieję użyć metod AES_ENCRYPT/odszyfrować, przedstawił dość dobrze tutaj:

DataBase encryption in Hibernate

i tutaj:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-column-read-and-write

(Choć to nie odnosi się do wersji 3.6 hibernacji, ja uwierz, że powinno być tak samo w 4.0).

Jednakże, ponieważ ten wykorzystuje następujące oznaczenia:

@Column(columnDefinition= "LONGBLOB", name="encryptedBody") 
@ColumnTransformer(
    read="AES_DECRYPT(encryptedBody, 'password')", 
    write="AES_ENCRYPT(?, 'password')") 
public byte[] getEncryptedBody() { 
    return encryptedBody; 
} 

public void setEncryptedBody(byte[] encryptedBody) { 
    this.encryptedBody = encryptedBody; 
} 

Wymaga to, że hasło zostać określone w samej adnotacji i nie może być zmienna.

Czy istnieje sposób użycia metod bazy danych przez hibernację w ten sposób, ale z hasłem jako zmienną? Czy istnieje lepsze podejście?

+0

Proponuję skorzystać z http://www.jasypt.org/ – sagneta

Odpowiedz

2

Obecnie nie ma sposobu na sparametryzowanie elementów fragmentów odczytu/zapisu. Są bardziej przeznaczone jako rozwiązania ogólnego przeznaczenia. Omówiliśmy dodawanie obsługi @Encrypted w Hibernate, która z grubsza działa tak, jak sugerujesz. @Encrypted dałby większą elastyczność, jak in-vm crypto versus in-db crypto, parametryzacja, itp.

JPA 2.1 posiada również funkcję, którą można wykorzystać, zwaną konwerterem atrybutów. Mogliby jednak stosować jedynie szyfrowanie w-vm.

Powiązane problemy