我正在寻找一种解决方案,以加密我的Play应用程序数据库。该应用程序已使用Ebean.io。我看到我可以使用Ebean解决方案对数据库进行加密。在那里,我配置了application.conf
ebean {
default = ["models.*"]
encryptKeyManager = models.BasicEncryptKeyManager
}
在此步骤之后,我实现了自己的ServerStartup,如下所示:
public class CustomServerConfigStartup implements ServerConfigStartup {
@Override
public void onStart(ServerConfig serverConfig) {
serverConfig.setEncryptKeyManager(new BasicEncryptKeyManager());
}
}
class BasicEncryptKeyManager implements EncryptKeyManager {
@Override
public EncryptKey getEncryptKey(String tableName, String columnName) {
return new CustomEncryptKey(tableName, columnName);
}
@Override
public void initialise() {
//Do nothing (yet)
}
}
class CustomEncryptKey implements EncryptKey {
private String tableName;
private String columnName;
public CustomEncryptKey(String tableName, String columnName) {
this.tableName = tableName;
this.columnName = columnName;
}
@Override
public String getStringValue() {
return play.Configuration.root().getString("play.http.secret.key") + "::" + this.tableName + "::" + this.columnName;
}
}
我用@Encrypted注释了实体的所有值。
@Entity
public class Settings extends Model {
@Id
public Long id;
@Encrypted
public String title;
}
我认为例外是Ebean的原因,因此我在Ebean https://groups.google.com/forum/?hl=de#!topic/ebean/7wD1pZIhu8U的GoogleGroup中创建了一个帖子。但是他们说这个例外是播放例外,所以现在我在这里。
有没有使用Ebean或其他技术对数据库进行加密的解决方案?