Le meilleur est de faire le chiffrement sur le client ou le serveur d'application, de sorte que la base de données n'a aucune idée de ce que sont les clés et ne peut pas déchiffrer les données. Si le client/serveur d'application est sur un autre hôte, tant mieux.
Si votre base de données chiffre et déchiffre les données pour vous, elle risque de se faire voler les clés avec la base de données.
Si vous utilisez les fonctions de chiffrement dans la base de données de pgcrypto, vous pouvez demander à l'application d'envoyer la clé avec les données, ce qui est au moins quelque peu utile. Il risque toujours d'avoir les clés exposées dans les journaux si un administrateur système utile active la journalisation agressive des déclarations ou le vidage automatique du plan, et à la fin si les clés vont à la machine de base de données, elles sont plus vulnérables que si elles ne le sont pas . Un attaquant qui prend le contrôle de la machine de la base de données peut également modifier les paramètres du journal, remplacer les binaires postgresql ou renifler le trafic pour capturer les clés et les données de cette manière.
Si le serveur d'applications et la base de données sont sur la même machine et gérés par le(s) même(s) rôle(s), il est moins utile de s'inquiéter de les isoler, et il peut être judicieux d'utiliser simplement pgcrypto.
Dans tous les cas, n'oubliez pas de saler !