Meus 2 cents:
Vamos colocar assim: voce tem uma informacao sensivel e gostaria de proteger.
Existem alguns caminhos:
-
Um cliente que tinha informacoes confidenciais, onde TUDO era sensivel (codigo e dados) optou pelo seguinte caminho: a particao era criptografada (LVM + LUKS) e liberada durante o boot atraves de chave no pendrive + chave digitada + chave online. Era chato mas garantia que em caso de sinistro ninguem teria acesso ao conteudo do HD (e com a parte online garantia uma forma de bloquear remotamente). Apos o boot um programa rodava em daemon garantindo que ninguem pudesse fazer login manual no console, tty e liberava ssh apenas em certas circunstancias. Mas veja que neste caso, uma vez o sistema no ar e a particao aberta os dados estao acessiveis 'limpos', sem criptografia - a protecao fica por conta da dificuldade de acesso ao banco local e nao ter conexao remota.
-
Nem tudo eh tao eh tao sensivel, apenas alguns campos - neste caso o mais interessante eh usar a criptografia "simetrica" (o mais comum), ou seja, aquele onde tem "ida e volta". Procure no google por "protect field symmetric encryption".
Um exemplo é o modulo pgcrypto do postgresql - a parte ruim eh que isto eh baseado em shared secret, entao voce vai ter de ser criativo na forma de guardar a chave.
Eh possivel criar metodos usando chaves assimetricas tambem - um pouco mais complexo.
Mas a ideia geral eh esta - ideias mais especificas podem surgir se compartilhar mais informacoes (linguagem, banco de dados e sistema operacional)
PS: Dependendo do que voce precisa, a forma LVM+LUKS eh a mais interessante (p.ex. roubo fisico de dados), pois ai voce nao precisa mexer nada na aplicacao. Se partir para a criptografia por dado (p.ex. campo ou tabela) voce ira precisar tratar manualmente isso na aplicacao, p.ex. na gravacao e recuperacao, na forma de pesquisa, nos indices, etc (p.ex. como pesquisar um campo criptografado ? tem formas como embendings, mas vale a pena ? etc).