2013-06-04 13 views
10

hibernateバックアップWebアプリケーションから渡されたときに、暗号化が必要なデータベース列があります。 webappは、tomcat 6、Hibernate 4、およびMysqlをバッキングストアとして使用しています。Hibernate - 列を暗号化して保存し、実行時にのみ復号化します

ただし、このフィールドを暗号化/復号化するためのパスワードは、プログラムの実行時にのみ利用可能です。当初、私は非常によくここで説明し、AES_ENCRYPT/DECRYPTメソッドを使用するように期待していた:ここ

DataBase encryption in Hibernate

と:

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

(これは、Hibernateのバージョン3.6を参照してくださいんが、Iそれは4.0で同じでなければならないと信じている)。これは、次の表記法を使用していますので

は、:

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

これは、パスワードは、注釈自体に指定され、変数にすることはできませんする必要があります。

この方法でhibernateを使用してデータベースメソッドを使用する方法はありますが、パスワードを変数として使用しますか?より良いアプローチがありますか?

+0

http://www.jasypt.org/を使用することをおすすめします。 – sagneta

答えて

2

現在、読み取り/書き込みフラグメントの部分をパラメータ化する方法はありません。それらは汎用ソリューションとしてより意味があります。私たちは、あなたが提案したように大体動作する@EncryptedをHibernateに追加することについて議論しました。 @Encryptedは、in-vmの暗号化とin-dbの暗号化、パラメータ化など、より柔軟性があります。

JPA 2.1には属性コンバーターという機能もあります。しかし、彼らはin-vm暗号を適用することしかできません。

関連する問題