PostgreSQL: зашифровать столбец с помощью pgcrypto

Мне нужно зашифровать некоторые столбцы в базе данных PostgreSQL 9.6. Зашифрованные данные по своей природе конфиденциальны; однако эти данные не являются паролями или другими учетными данными для аутентификации. Эти данные необходимо будет расшифровать для статистического анализа и использования пользователями.

Прочитав несколько вопросов и ответов:

... и учитывая эти комментарии:

введите описание изображения здесь

... похоже, самая большая проблема с использованием модуля pgcrypto - это хранение ключей в той же базе данных.

Напрашивается вопрос:

Соответствует ли лучшим практикам хранение ключа в другой базе данных и доступ к нему через оболочку внешних данных, например Postgresql_FDW?


person losthorse    schedule 23.02.2017    source источник


Ответы (1)


Секретное хранилище - распространенная проблема при использовании криптомеханизмов.

pgcrypto не обеспечивает хранение ключей, вы можете хранить ключ там, где хотите, и защищать его, как можете.

Хранение ключа в другой базе данных, если им управляет тот же администратор базы данных, не обеспечивает большой безопасности, поскольку администратор базы данных может получить к нему доступ таким же образом.

В идеале вы должны хранить ключ в безопасном хранилище и запрашивать его у своего приложения для построения запросов. Он будет по-прежнему виден администратором баз данных, пока запрос выполняется через select * from pg_stat_activity.

Вы можете установить ключ для широкого использования сеанса SQL через set session my.vars.cryptokey = 'secret';, а затем использовать его в своих запросах со следующим синтаксисом: current_setting('my.vars.cryptokey')::text

Чтобы быть (почти) прозрачным с точки зрения приложения, правила PostgreSQL могут помочь преобразовать secure_column в вызов функции дешифрования с сохраненным ключом сеанса. Для вставки потребуется триггер предварительной вставки.

person TriYop    schedule 10.01.2018