Geheime Speicherung ist ein häufiges Problem bei der Verwendung von Kryptomechanismen.
pgcrypto bietet keine Schlüsselspeicherung, es steht Ihnen frei, den Schlüssel zu speichern, wo Sie möchten, und ihn so zu schützen, wie Sie können.
Das Speichern des Schlüssels in einer anderen Datenbank, wenn er von demselben DBA verwaltet wird, bietet nicht viel Sicherheit, da der DBA auf die gleiche Weise darauf zugreifen kann.
Idealerweise würden Sie den Schlüssel in einem sicheren Tresor speichern und ihn von Ihrer Anwendung anfordern, um die Abfragen zu erstellen. Es ist weiterhin für DBA sichtbar, während die Anforderung über select * from pg_stat_activity
ausgeführt wird .
Sie können den Schlüssel für die Verwendung in einer SQL-Sitzung über set session my.vars.cryptokey = 'secret';
festlegen Verwenden Sie es dann in Ihren Abfragen mit der folgenden Syntax:current_setting('my.vars.cryptokey')::text
Um aus Anwendungssicht (fast) transparent zu sein, können PostgreSQL-Regeln bei der Übersetzung von secure_column
helfen mit dem in der Sitzung gespeicherten Schlüssel zur Call-to-decrypt-Funktion. Zum Einfügen wäre ein Pre-Insert-Trigger erforderlich.