Los mejores La forma es hacer el cifrado en el cliente o servidor de aplicaciones, por lo que la base de datos no tiene idea de cuáles son las claves y no puede descifrar los datos. Si el cliente/servidor de aplicaciones están en un host diferente, mucho mejor.
Si su base de datos cifra y descifra los datos por usted, entonces es vulnerable a que le roben las claves junto con la base de datos.
Si usa las funciones criptográficas en la base de datos de pgcrypto, puede hacer que la aplicación envíe la clave junto con los datos, lo que es al menos algo útil. Sin embargo, aún existe el riesgo de que las claves estén expuestas en los registros si un administrador de sistemas útil activa el registro de declaraciones agresivo o el volcado automático del plan, y al final, si las claves van a la máquina de la base de datos, son más vulnerables que si no. . Un atacante que toma el control de la máquina de la base de datos también puede cambiar la configuración del registro, reemplazar los archivos binarios de postgresql o rastrear el tráfico para capturar claves y datos de esta manera.
Si el servidor de aplicaciones y la base de datos están en la misma máquina y están administrados por los mismos roles, no tiene sentido preocuparse por aislarlos, y puede ser sensato usar pgcrypto.
De cualquier manera, ¡recuerda ponerle sal!