Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for Greenplum®
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Расчет конфигурации кластера
    • Создание кластера
    • Подключение к базе данных
    • Остановка и запуск кластера
    • Управление хостами кластера
      • Просмотр хостов кластера
      • Расширение кластера
    • Изменение настроек кластера
    • Управление ролями и пользователями
    • Управление клиентскими процессами
    • Использование внешних таблиц
    • Расширения Greenplum
      • Управление расширениями
      • pgcrypto
      • uuid-cb
    • Управление резервными копиями
    • Просмотр логов кластера
    • Удаление кластера
    • Диагностика производительности
    • Мониторинг состояния кластера и хостов
    • Управление ресурсными группами
  • Практические руководства
    • Миграция базы данных в Managed Service for Greenplum®
    • Создание внешней таблицы на базе таблицы из бакета Yandex Object Storage с помощью конфигурационного файла
    • Миграция базы данных из Greenplum® в PostgreSQL
    • Миграция базы данных из Greenplum® в ClickHouse
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Классы хостов
    • Сеть в Managed Service for Greenplum®
    • Квоты и лимиты
    • Типы дисков
    • Резервные копии
    • Ресурсные группы
    • Шардирование
    • Типы хранения данных
    • Пользователи и роли
    • Техническое обслуживание
    • Настройки Greenplum®
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • BackupService
      • ClusterService
      • ResourcePresetService
      • OperationService
    • REST (англ.)
      • Overview
      • Backup
        • Overview
        • get
        • list
      • Cluster
        • Overview
        • create
        • delete
        • expand
        • get
        • list
        • listBackups
        • listLogs
        • listMasterHosts
        • listOperations
        • listSegmentHosts
        • restore
        • start
        • stop
        • streamLogs
        • update
      • ResourcePreset
        • Overview
        • get
        • list
      • Operation
        • Overview
        • get
  • История изменений
  • Вопросы и ответы
    • Общие вопросы
    • Подключение
    • Резервное копирование
    • Изменение кластера
    • Кластер и хосты Managed Service for Greenplum®
    • Работа с внешними таблицами
    • Управление пользователями
    • Мониторинг и логи
    • Все вопросы на одной странице
  1. Пошаговые инструкции
  2. Расширения Greenplum
  3. pgcrypto

Использование pgcrypto в Managed Service for Greenplum®

Статья создана
Yandex Cloud
  • Установить расширение pgcrypto в кластер Greenplum®
  • Примеры использования
    • Однонаправленное шифрование
    • Симметричное шифрование
    • Ассиметричное шифрование

Расширение pgcrypto предоставляет криптографические функции, которые позволяют администраторам баз данных хранить определенные столбцы данных в зашифрованном виде.

Установить расширение pgcrypto в кластер Greenplum®

  1. Подключитесь к базе данных от имени владельца или пользователя, имеющего в базе данных разрешение CREATE, и выполните команду:

    CREATE EXTENSION pgcrypto;
    
  2. Проверьте, что расширение было установлено:

    SELECT extname FROM pg_extension;
    

Подробнее о расширении pgcrypto см. в официальной документации.

Примеры использования

Однонаправленное шифрование

  1. Создайте таблицу:

    CREATE TABLE tbl_one_way_crypt(username varchar(100) PRIMARY KEY, cryptpwd text);
    
  2. Вставьте данные с хешированным текстом в столбце cryptpwd:

    INSERT INTO tbl_one_way_crypt(username, cryptpwd)
        VALUES ('bob', crypt('Password123', gen_salt('md5'))),
               ('alice', crypt('Password123', gen_salt('md5')));
    
  3. Проверьте, что данные в столбце cryptpwd зашифрованы:

    SELECT * FROM tbl_one_way_crypt;
    
  4. Проверьте, что в зашифрованных данных хранится текст Password123:

    SELECT username FROM tbl_one_way_crypt
    WHERE cryptpwd = crypt('Password123', cryptpwd);
    

Симметричное шифрование

  1. Создайте таблицу:

    CREATE TABLE tbl_sym_crypt (username varchar(100) PRIMARY KEY, crypttext text);
    
  2. Вставьте данные с зашифрованным текстом в столбце crypttext:

    INSERT INTO tbl_sym_crypt (username, crypttext) 
        VALUES ('bob', pgp_sym_encrypt('Text to encrypt','!qazSymKeyXsw2')),
               ('alice', pgp_sym_encrypt('Secret Data','!qazSymKeyXsw2'));
    
  3. Проверьте, что данные в столбце crypttext зашифрованы:

    SELECT * FROM tbl_sym_crypt;
    
  4. Получите расшифрованные данные, явно указав тип данных bytea:

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

Ассиметричное шифрование

  1. Подготовьте пару ключей с помощью утилиты GnuPG:

    1. Создайте пару ключей:

      gpg --gen-key
      

      Укажите USER-ID ключа (Real name и Email address) и Passphrase.

    2. Экспортируйте ключи в файлы:

      gpg -a --export <Real name ключа> > public.key && \
      gpg -a --export-secret-keys <Real name ключа> > private.key
      
  2. Создайте таблицу:

    CREATE TABLE tbl_asym_crypt(ssn_id SERIAL PRIMARY KEY,
        username varchar(100), ssn bytea);
    
  3. Вставьте данные с зашифрованным текстом в столбце ssn с помощью публичного ключа:

    INSERT INTO tbl_asym_crypt (username, ssn)
    SELECT tmp.username, pgp_pub_encrypt(tmp.ssn, keys.pubkey) AS tbl
    FROM (
        VALUES ('Alice', '123-45-6788'), ('Bob', '123-45-6799'))
        AS tmp(username, ssn)
    CROSS JOIN (SELECT  dearmor('<содержимое файла public.key>') AS pubkey) AS keys;
    
  4. Проверьте, что данные с столбце ssn зашифрованы:

    SELECT * FROM tbl_asym_crypt;
    
  5. Расшифруйте данные в столбце ssn с помощью закрытого ключа:

    SELECT username, pgp_pub_decrypt(ssn, keys.privkey, '<Passphrase ключа>')
        AS decrypted_ssn FROM tbl_asym_crypt
    CROSS JOIN (SELECT dearmor('<содержимое файла private.key>') AS privkey) AS keys;
    

Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками VMware, Inc в США и/или других странах.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Установить расширение pgcrypto в кластер Greenplum®
  • Примеры использования
  • Однонаправленное шифрование
  • Симметричное шифрование
  • Ассиметричное шифрование