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.