Шифрование данных в Greenplum с расширением pgcrypto

Greenplum для администраторов и дата-инженеров примеры курсы обучение, безопасность Greenplum, Greenplum настройка шифрование примеры, Greenplum pgcrypto, обучение администраторов Greenplum, Школа Больших Данных Учебный Центр Коммерсант

Чтобы сделать наши курсы по Greenplum еще более полезными для дата-инженеров и администраторов, сегодня познакомимся с pgcrypto – важным расширением этой MPP-СУБД, которое предоставляет криптографические функции, чтобы хранить некоторые столбцы данных в зашифрованном виде. Как установить расширение pgcrypto и использовать его для улучшения безопасности Greenplum.

Шифрование данных в Greenplum

База данных Greenplum устанавливается с дополнительным модулем функций шифрования и дешифрования под названием pgcrypto, который позволяет администраторам баз данных хранить определенные столбцы таблиц в зашифрованном виде. Это добавляет дополнительный уровень защиты конфиденциальных данных, поскольку зашифрованные данные в Greenplum невозможно прочитать без ключа шифрования. Кроме того, их нельзя прочитать непосредственно с дисков. Модуль pgcrypto предоставляет криптографические функции для PostgreSQL, на которой основан Greenplum, о чем мы писали здесь. Изначально расширение требует OpenSSL и не будет установлено, если поддержка OpenSSL не была выбрана при сборке PostgreSQL.

Модуль pgcrypto считается «доверенным», то есть его могут устанавливать пользователи без прав суперпользователя, имеющие привилегию CREATE в текущей базе данных. Чтобы установить расширение pgcrypto в кластер Greenplum, следует подключитесь к базе данных от имени владельца или пользователя, имеющего в базе данных разрешение CREATE, и выполнить команду:

CREATE EXTENSION pgcrypto

Проверить, что расширение установлено, поможет команда

SELECT extname FROM pg_extension;

Функции pgcrypto выполняются внутри сервера базы данных, что означает, что все данные и пароли перемещаются между pgcrypto и клиентским приложением в виде открытого текста. Поэтому для обеспечения безопасности следует использовать SSL-соединения между клиентом и главным сервером Greenplum. Как настроить расширение pgcrypto и использовать его, рассмотрим далее.

Настройка и использование pgcrypto

Хотя модуль pgcrypto устанавливается при установке Greenplum, прежде чем использовать какие-то его функции, надо зарегистрировать расширение pgcrypto в каждой базе данных. Начиная с Greenplum 6.22, о котором мы писали здесь, расширение pgcrypto предоставляет параметр конфигурации модуля pgcrypto.fips. Этот параметр настраивает поддержку Greenplum для ограниченного набора функций шифрования федерального стандарт обработки информации FIPS 140-2 (Federal Information Processing Standard). По умолчанию  шифрование FIPS не включено. Чтобы включить этот параметр, надо включить FIPS на всех хостах Greenplum. Для этого следует настроить параметр конфигурации сервера Greenplum shared_preload_libraries для загрузки библиотеки pgcrypto. Например, это можно сделать с помощью утилиты gpconfig, которая обновляет параметр в файлах postgresql.conf Greenplum:

gpconfig -c shared_preload_libraries -v '\$libdir/pgcrypto'

А следующая команда отображает значение shared_preload_libraries:

gpconfig -s shared_preload_libraries

Далее следует перезапустить СУБД с помощью команды

gpstop -ра

Включите параметр конфигурации сервера pgcrypto.fips для каждой базы данных, использующей шифрование FIPS можно, установив значение параметра on для базы данных (testdb):

ALTER DATABASE testdb SET pgcrypto.fips TO on;

При этом нельзя использовать команду SET, которая обновляет параметр для сеанса, или утилиту gpconfig, которая обновляет файлы postgresql.conf. После установки параметра надо повторно подключиться к базе данных, чтобы включить поддержку шифрования для сеанса.

Когда этот параметр pgcrypto.fips включен, происходят следующие изменения:

  • режим FIPS инициализируется в библиотеке OpenSSL;
  • функции digest() и hmac() разрешают только алгоритм шифрования SHA;
  • функции для алгоритмов crypt и gen_salt деактивируются;
  • функции шифрования/дешифрования PGP и RAW поддерживают только алгоритмы AES и 3DES.

Чтобы проиллюстрировать, как работает pgcrypto, рассмотрим пример симметричного шифрования. Сперва создадим таблицу из двух столбцов, куда в поле типа varchar запишем логин пользователя (username), что будет первичным ключом, и пароль (passw), куда будем вставлять зашифрованные данные пароля как текст:

CREATE TABLE tbl_sym_crypt (username varchar(100) PRIMARY KEY, passw text);

Затем вставим данные в эту таблицу – логин пользователя укажем явно, а для шифрования пароля будем использовать симметричный ключ !qazSymKeyXsw2:

INSERT INTO tbl_sym_crypt (username, passw)     
VALUES (kate', pgp_sym_encrypt('kate_paswrd,'!qazSymKeyXsw2')),           
('petr', pgp_sym_encrypt('petr_pass','!qazSymKeyXsw2'));

Расшифруем данные, явно указав их тип данных как bytea в функции pgp_sym_decrypt() в SQL-запросе на выборку:

SELECT username, pgp_sym_decrypt(crypttext::bytea, '!qazSymKeyXsw2')FROM tbl_sym_crypt;

Примечательно, что документация PostgreSQL Отмечает недопустимость расшифровки данных типа bytea функцией pgp_sym_decrypt() . Это ограничение введено, чтобы не допустить вывода некорректных символьных данных. А вот расшифровывать изначально текстовые данные с помощью pgp_sym_decrypt_bytea можно без ограничений.

В заключение отметим, как отключить расширение pgcrypto из Greenplum и в каких случаях это надо. Если расширение pgcrypto не используется, его следует удалить из базы данных (testdb):

psql -d testdb -c 'DROP EXTENSION pgcrypto'

Также надо удалить \$libdir/pgcrypto из параметра shared_preload_libraries командами

gpconfig -s shared_preload_libraries
gpconfig –r \$libdir/pgcrypto

и перезапустить СУБД командой

gpstop -ра

Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://docs.vmware.com/en/VMware-Tanzu-Greenplum/6/greenplum-database/GUID-ref_guide-modules-pgcrypto.html
  2. https://cloud.yandex.ru/docs/managed-greenplum/operations/extensions/pgcrypto
  3. https://www.postgresql.org/docs/current/pgcrypto.html
Поиск по сайту