Лучший способ 1002 * - это шифрование на клиенте или сервере приложений, поэтому база данных не знает, что это за ключи, и не может расшифровать данные. Если клиент / сервер приложений находятся на другом хосте, тем лучше.
Если ваша база данных зашифровывает и расшифровывает данные для вас, то это может привести к краже ключей вместе с базой данных.
Если вы используете криптографические функции pgcrypto в базе данных, вы можете заставить приложение отправлять ключ вместе с данными, что, по крайней мере, несколько полезно. Тем не менее, существует риск, что ключи будут открыты в журналах, если полезный системный администратор включит агрессивное ведение журнала операторов или автоматический сброс плана, и, в конце концов, если ключи отправляются на компьютер базы данных, они более уязвимы, чем если бы они не были , Злоумышленник, который получает контроль над компьютером базы данных, может также изменить настройки журнала, заменить двоичные файлы postgresql или перехватить трафик для захвата ключей и данных таким образом.
Если appserver и db находятся на одной машине и управляются одной и той же ролью (ролями), нет смысла беспокоиться об их изоляции, и может быть разумно просто использовать pgcrypto.
В любом случае, не забудьте солить!