Перейти к основному содержимому

secret_dump. Создание защищенного дампа

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: pg_dump.

Схема размещения: pg_catalog.

Расширение входит в состав решения для формирования защищенного дампа и необходимо для его создания. Данное расширение может работать только с включенной функциональностью защиты данных от привилегированных пользователей (admin protection или AP).

Важно

Перед установкой расширения необходимо ознакомиться с разделом «Ограничения» текущего документа.

Доработка

Формирование дампа происходит в соответствии с ванильным поведением утилиты pg_dump, за исключением режимов работы:

  • --compress/-Z - отсутствует сжатие;
  • --format/F - поддерживается только текстовый формат (sql);
  • --inserts - нельзя выгружать данные в формате insert, поддерживается только COPY.
  • --clean команды DROP для удаления существующих объектов базы данных не генерируются при формировании защищенного дампа. Если указаны оба ключа -c и одновременно, команда DROP DATABASE не буден создана.

Сформированный дамп отличается от ванильного функциями:

SELECT pg_catalog.sd_load_secret_dump(\<GUID\>, \<TimeStamp\>, \<EncodingCRC\>, \<EncodingKeyDump\>); - функция с GUID и засекреченным ключом, которые будут необходимы при применении дампа;
SELECT pg_catalog.sd_protection_action(\<EncodingCRC\>, query body); - функция с sql-запросом, защищенным от изменения засекреченной контрольной суммой;
SELECT pg_catalog.sd_protection_policies(\<EncodingCRC\>, query policy); - функция для работы с политиками;
SELECT pg_catalog.sd_end_secret_dump(); - функция завершения применения защищенного дампа.
Важно

После формирования дампа этим же GUID-ом больше нельзя снять дамп второй раз.

Подробное описание этих функций, а также других объектов расширения приведено в подразделе «Управление» данного документа.

Ограничения

Требования, которые необходимо учитывать при работе с расширением:

  • Нельзя добавлять расширение в shared_preload_libraries.
  • Расширение возможно установить только на БД, с включенным механизмом защиты данных.

Установка

Расширение должно быть установлено в БД, на которой будет формироваться дамп:

CREATE EXTENSION secret_dump;

Настройка

Для настройки максимального количества выделяемой памяти в конфигурационный файл postgresql.conf добавлен параметр secret_dump.max_memory_allocate. Значение указывается в МБ. По умолчанию размер установлен в 1ГБ. Минимальный 1МБ, максимальный 1ТБ.

К дополнительным объектам расширения можно отнести:

  • secret_dump_schema - схема для таблицы pg_secret_backup_keys;

  • secret_dump_schema.pg_secret_backup_keys(guid text not null, key text not null, crc32 integer not null,key_used bool not null) - таблица для связок GUID+KEY. Поля таблицы:

    • guid - идентификатор GUID, соответствующий ключу засекречивания;
    • key - ключ засекречивания в закодированном виде;
    • use_dump - флаг использования ключа для снятия дампа;
    • check_crc - контрольная сумма строки с рассекреченным ключом, для проверки целостности данных.

Управление

Пользователь не должен обращаться к функциям формирования дампа, так как это может привести к некорректной работе БД. В данном разделе рассматриваются функции загрузки дампа и функции работы с ключами засекречивания, с которыми может столкнуться пользователь.

Функции загрузки дампа

sd_load_secret_dump

Синтаксис: void pg_catalog.sd_load_secret_dump(<GUID>, <TimeStamp>, <EncryptedCRC>, <EncryptedKey>).

Описание: функция установки ключа в оперативную память для последующей загрузки защищенных объектов дампа в базу. Ключ либо берется из поля <EncryptedKey>, рассекреченным ключом кодирования ключей (при совпадении его контрольной суммы с полем <EncryptedCRC>), либо из таблицы secret_dump_schema.pg_secret_backup_keys, в соответствии с GUID.

sd_protection_action

Синтаксис: pg_catalog.sd_protection_action(<EncryptedCRC>, <query>).

Описание: функция применения запроса <query> к БД с предварительной проверкой совпадения его контрольной суммы с <EncryptedCRC>. Также в этом запросе возможна постановка под защиту объекта БД.

sd_protection_policies

Синтаксис: pg_catalog.sd_protection_policies(<EncryptedCRC>, <query>).

Описание: функция применения запроса <query> с заданием необходимых политик и назначение прав доступа политик к защищенным объектам. Перед выполнением запроса происходит проверка совпадения его контрольной суммы с <EncryptedCRC>.

sd_end_secret_dump

Синтаксис: pg_catalog.sd_end_secret_dump().

Описание: функция завершения загрузки защищенного дампа.

Функции работы с ключами засекречивания

Синтаксис: pg_catalog.sd_generate_guid_key_dump().

Описание: функция создания связки GUID+KEY. Возвращает значение сформированного GUID в формате base64. Доступна всем пользователям.

sd_generate_guid_key_dump

Синтаксис: pg_catalog.sd_set_guid_key_dump(<GUID>, <KEY>).

Описание: Функция загрузки связки GUID+KEY. В случае успешной загрузки возвращает true, иначе – false. Функция доступна администратору безопасности.

sd_set_guid_key_dump

Синтаксис: pg_catalog.sd_set_guid_key_dump(<GUID>, <KEY>).

Описание: функция загрузки связки GUID+KEY. В случае успешной загрузки возвращает true, иначе – false. Связка GUID+KEY после загрузки не может использоваться для формирования дампа. Функция доступна администратору безопасности.

sd_get_list_guids_dump

Синтаксис: pg_catalog.sd_get_list_guids_dump().

Описание: функция вывода таблицы secret_dump_schema.pg_secret_backup_keys, содержащей поля:

  • guid - идентификатор GUID, соответствующий ключу засекречивания;
  • key - ключ засекречивания в засекреченном виде;
  • use_dump - флаг использования ключа для снятия дампа;
  • check_crc, контрольная сумма строки с рассекреченным ключом для проверки целостности данных.

Функция доступна администратору безопасности.

sd_get_guid_dump

Синтаксис: pg_catalog.sd_get_guid_dump(<GUID>).

Описание: функция получения ключа по GUID. Функция доступна администратору безопасности.

sd_is_valid_guid_dump

Синтаксис: pg_catalog.sd_is_valid_guid_dump(<GUID>).

Описание: функция проверки флага использования связки GUID+KEY для снятия дампа и проверки целостности информации о ключе. Функция доступна всем пользователям.

sd_drop_guid_dump

Синтаксис: pg_catalog.sd_drop_guid_dump(<GUID>).

Описание: функция удаления связки GUID+KEY из таблицы secret_dump_schema.pg_secret_backup_keys. Функция доступна администратору безопасности.

sd_put_protect_function

Синтаксис: pg_catalog.sd_put_protect_function().

Описание: функция постановки функций pg_catalog.sd_set_guid_key_dump, pg_catalog.sd_get_list_guids_dump, pg_catalog.sd_get_guid_dump, pg_catalog.sd_drop_guid_dump под защиту и создания политики sd_policy_dump. Это означает, что на данную политику будут выдано разрешение вызовов перечисленных функций с назначением политики на sec_admin_role.

Использование модуля/руководство по использованию

Использование модуля подробно описано в разделе «Выгрузка данных в дамп при включенных СЗИ» документа «Сценарии администрирования».

Ссылки на документацию разработчика

Дополнительно поставляемый модуль pg_dump: https://www.postgresql.org/docs/current/app-pgdump.html.