Comments 11
Проверить установку можно, подключившись к необходимой базе данных с помощью клиента
psql
, после чего выполнить команду:
Не всегда есть под рукой psql. Почти то же самое можно получить и на чистом SQL. Что-то вроде
SELECT pg_extension.extname,
pg_authid.rolname AS extowner,
pg_extension.extrelocatable,
pg_namespace.nspname AS extnamespace,
pg_extension.extversion
FROM pg_extension
JOIN pg_authid ON pg_extension.extowner = pg_authid.oid
JOIN pg_namespace ON pg_extension.extnamespace = pg_namespace.oid;
Описание в принципе тоже где-то валяется, но искать лень...
Осталось понять как индексировать зашифрованные данные... И каким образом хранится индекс по ним.... :-)
Вряд ли документация откровенно врёт. А коли так, то значение в индексе не может лежать в открытой форме, и остаётся два варианта - либо в индексе лежит шифрованное значение (и тогда он нафиг не нужен), либо такие поля вообще не индексируются. Если есть локальный постгресс, то проверить это - вопрос пары минут.
Стараться проектировать так, чтобы не нужен был поиск по зашифрованным данным :)
А если все-таки нужен, то рассмотреть возможность:
- выделять какой-то кусок этих данных, минимально необходимый для поиска, в незашифрованном виде, и хранить в отдельной колонке
- если минимально необходимый кусок данных для поиска всё-таки обязан быть зашифрованным, возможно его можно смапить во что-то промежуточное, что уже можно будет проиндексировать и не шифровать
С pgcrypto напрямую невозможно индексировать данные. Есть конечно не слишком удобные решения, по типу детерминированного шифрования или хранения даннных в открытом виде, но это все неэффективно. Лучше тогда уж индексировать хэш зашифрованных значений, и то это не панацея.
никак такая система не будет производительной про работу поиска типа лайк мы тоже забываем поиск по триграммам тоже забываем
1) "pgcrypto — доверенное расширение для PostgreSQL"
https://www.postgresql.org/docs/current/pgcrypto.html
"This module is considered “trusted”, that is, it can be installed by non-superusers who have CREATE
privilege on the current database."
Ну то есть поэтому делаем:
«Шаг 2. Отзываем все права у роли PUBLIC
. Теперь ни один пользователь по умолчанию не сможет вызывать функции pgcrypto."
То есть логика ещё и в том, чтобы условный злоумышленник не зашифровал уже имеющиеся данные своим ключом.
2) Два раза подряд идёт в тексте команда
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA crypto FROM PUBLIC;
3) «Можно создать специальные роли для приложений"
Зачем, если создаётся отдельная схема, используемая для безопасности?
4) «В отличие от симметричного шифрования"
PGP застратнее по ресурсам ЦПУ по сравнению, если говорить о минусах.
5) "gen_random_bytes(count)
выдает криптографически стойкую последовательность "
Да, так написано в документации, но это слишком смелое утверждение (не зря аппаратные генераторы случайных чисел производят).
Руководство по pgcrypto — шифрование внутри PostgreSQL. Часть 1