Tajne przechowywanie jest częstym problemem podczas korzystania z mechanizmów kryptograficznych.
pgcrypto nie zapewnia przechowywania kluczy, możesz przechowywać klucz tam, gdzie chcesz i chronić go tak, jak możesz.
Przechowywanie klucza w innej bazie danych, jeśli jest zarządzane przez tego samego administratora, nie zapewnia dużego bezpieczeństwa, ponieważ administrator może uzyskać do niego dostęp w ten sam sposób.
Najlepiej byłoby przechowywać klucz w bezpiecznym skarbcu i zażądać go z aplikacji w celu skonstruowania zapytań. Nadal będzie widoczny z DBA, gdy żądanie jest wykonywane przez select * from pg_stat_activity
.
Możesz ustawić klucz dla całej sesji SQL poprzez set session my.vars.cryptokey = 'secret';
następnie użyj go w swoich zapytaniach z następującą składnią:current_setting('my.vars.cryptokey')::text
Aby być (prawie) przezroczystym z punktu widzenia aplikacji, reguły PostgreSQL mogą pomóc w tłumaczeniu secure_column
do wywołania funkcji odszyfrowania z kluczem przechowywanym w sesji. Do wstawienia wymagany byłby wyzwalacz przed wstawieniem.