I’m working on a Grails 1.0.4 project that has to be released in less than 2 weeks, and the customer just came up with a requirement that all data in the database should be encrypted.
Since encryption of every database access in the application itself could take a lot of time and will be error prone, the solution I seek is some kind of encryption transparent to the application.
Is there a way to setup Hibernate to encrypt all data in all tables (except maybie the id and version columns) or should I seek a MySQL solution (we’re using MySQL 5.0) ?
EDIT:
Thanks for all of your posts for alternative solutions, if the customer changes mind it would be great. As for now, the requirement is “No plain text in the Database”.
Second thing I’d like to point out is that I’m using Grails, for those not fammiliar with it, It’s a convention over configuration, so even small changes to the application that are not by convention should be avoided.
Well it has been a long time since I’ve asked the question. In the meantime, thanks for all the answers. They were great when dealing with the original idea of encrypting the entire database, but the requirement changed to only encrypting sensitive user info, like name and address. So the solution was something like the code down below.
We’ve implemented an Encrypter which reads the encryption method from the record ( so there can be different encryption per record) and use it to connect transient duplicate fields to the ones encrypted in the database. The added bonus/drawbacks are:
Encrypted fields cannot be used with default grails/hibernate methods for search through database, we’ve made custom methods in services that get data, encrypt it and then use the encrypted data in the where clause of a query. It’s easy when using User.withCriteria
class User {
}