Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Тестовый пример
При написании статьи использовалась Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленной СУБД PostgreSQL 11. Установка СУБД выполнялась при установке 1С в соответствии с инструкцией Установка и настройка сервера 1С v8.3.xx на ОС Astra Linux. В качестве базы данных (БД) использовалась предоставляемая разработчиками стандартная тестовая БД dvdrental, описанная в статье PostgreSQL Sample ..Database.
Для создания тестовой БД в PostgreSQL:
Загрузить архив с тестовой БД командой:
Command wget https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip Распаковать архив:
Command unzip dvdrental.zip
В результате распаковки будет создан файл dvdrental.tar;
- Опционально, для
Для удобства работы, чтобы не вводить каждый раз пароль, настроить права доступа
. Работу с БД без ввода пароля можно обеспечить следующими способами:Создать, для чего создать файл .pgpass, содержащий сроки, задающие пароли доступа. Каждая
стокастрока имеет вид:
Блок кода <имя_или_IP-адрес_хоста>:<IP-порт>:<имя_БД>:<имя_пользователя>:<пароль_пользователя>
Например:
Блок кода localhost:5432:dvdrental:postgres:пароль
Файл должен иметь маску прав доступа 600, иначе он будет игнорироваться. Создать файл можно с помощью любого текстового редактора, или, например, командами:
q2w2e2r2Command touch ~/.pgpass
chmod 600 ~/.pgpass
echo "localhost:5432:*:postgres:12345678" > ~/.pgpass
Для примера использован пароль 12345678. Допускается использование метасимвола "*" для обозначения любого значения;
Использовать команду sudo (sudo -u postgresql) чтобы команды работы с БД выполнялись от имени пользователя postgres. Например Создать базу данных с именем dvdrental:
Command sudo -u postgres psql -c 'CREATE DATABASE dvdrental;'
При этом для загрузки архива БД в БД PostgreSQL пользователю postgres должен быть предоставлен доступ на чтение информации из архива БД. Для предоставления такого доступа можно использовать следующие команды (предполагается, что все файлы находятся в домашнем каталоге):
Command setfacl -m u:postgres:rx $HOME
setfacl -m u:postgres:r dvdrental.tarПодробнее про использование команды setfacl см. Списки управления доступом к файловым объектам (ACL) в Astra Linux.
Использовать явное указание имени пользователя и пароля при указании БД (небезопасно), например:
Command pg_dump --dbname=postgresql://<имя_пользователя>:<пароль>@localhost:5432/dvdrental Создать пустую БД в PostgreSQL командой:
Command postgres psql psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;'
Загрузить архив тестовой БД в БД PostgreSQL. Команда:
Command infopg_restore -U postgres -h localhost -d dvdrental dvdrental.tar Указанная команда фактически является командой восстановления БД из архива.
Создание резервной копии базы данных
Для сохранения резервных копий БД в основном используются две команды:
- pg_dump - выгрузка указанной БД;
- pg_dumpall - выгрузка всех БД и метаданных.
Сохранение может выполняться в текстовом формате или в формате архива.
Примеры использования:
Сохранение всех БД в текстовом формате:
Command pg_dumpall -h localhost -U postgres -f postgresql_dump
Информация При работе с защищенной версией СУБД PostgreSQL (используется в Astra Linux Special Edition) при сохранении могут выдаваться сообщения вида:
Блок кода pg_dump: obtained maximum maclabel {0,0} of data in table "actor"
Эти сообщения не являются сообщениями об ошибках, и являются информацией о найденной максимальной классификационной метке сохраняемых таблиц.
Сохранения тестовой БД dvdrental в формате архива:
Command pg_dump -h localhost -U postgres -f dvdrental_dump.tar -F tar
Загрузка резервной копии базы данных
Перед загрузкой резервной копии содержимое БД должно быть очищено. Сделать это можно удалив и заново создав БД:
Command |
---|
psql -U postgres -h localhost -c 'DROP DATABASE dvdrental;' psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;' |
Загрузка БД, сохраненной в текстовом формате:
Command |
---|
psql -U postgres -h localhost dvdrental < dvdrental_dump |
Загрузка БД, сохраненной в формате архива:
Command |
---|
pg_restore -U postgres -h localhost -d dvdrental dvdrental_dump |
Подробная справка по всем командам доступна в справочной системе MAN.
Особенности работы с данными, имеющими ненулевые классификационные метки
Защищенная СУБД PostgreSQL, применяемая в Astra Linux Special Edition, поддерживает управление доступом к записям БД с учетом классификационных меток записей (см. соответствующую документацию на изделия, например, Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7). Эксплуатационная и дополнительная документация).
При выгрузке копий данных, хранящихся в защищенной БД (команды pg_dump, pg_dumpall, psql COPY), выполняется процедура аккумулирования классификационной метки. При этом классификационная метка для файла резервной копии определяется как максимальная классификационная метка всех выгружаемых объектов данных, и по завершении выгрузки, выполняется попытка установки полученной классификационной метки на файл с выгруженными данными. Для назначения метки у пользователя, выполняющего команду pg_dump, должно иметься PARSEC-привилегия PARSEC_CAP_CHMAC, позволяющая изменять классификационные метки файловых объектов (см. Привилегии PARSEC), а также каталог, в котором сохраняется файл должен иметь возможность содержать файлы с такой классификационной меткой. Установка классификационной метки на файлы, создающиеся при выгрузке данных с помощью команд pg_dump и pg_dumpall, требуется не строго, т.е. если метку не удалось установить, то файл остается с классификационной меткой, унаследованной от пользователя, запустившего команду. Команда psql COPY TO ФАЙЛ работает аналогично в случаях, когда указывается файл вывода, за исключением того, что запись данных осуществляется в файл на сервере, а не на клиенте. Метка на файле так же требуется не строго, и если метку не удалось установить, то она наследуется от процесса - в данном случае от процесса postgres. Т.е. классификационная метка в таком случае зависит от метки процесса PostgreSQL (задается параметром PDPLabel в юните systemd службы postgresql). Отдельно обрабатывается команда psql TO SDOUT. При выполнении этой команды (аналог команды \copy из psql) установка классификационной метки не выполняется.
В соответствии с общими правилями МРД (см. Метка безопасности: структура и состав) каталог для хранения резервных копий должен иметь классификационную метку не меньшую, чем максимальная классификационная метка выгружаемых данных, а если в каталоге предполагается хранить резервные копии с разными классификационными метками - то в метке безопасности каталога дожен использоваться флаг ccnr. Как пример, создать каталог с нужной меткой безопасности можно следующими командами:
Создать сам каталог, например:
Command sudo mkdir /var/backups-psql Присвоить созданному каталогу нужную метку безопасности, например:
Command sudo pdpl-file 3:63:-1:ccnr /var/backups-psql
При этом для того, чтобы обеспечить достаточные права для назначения классификационной метки файлу с резервной копией команды выгрузки можно выполнять от sudo, или назначить PARSEC-привилегию PARSEC_CAP_CHMAC пользователю-администратору СУБД. Например:
Command |
---|
sudo usercaps -m 0x8 postgres |
Назначение привилегии пользователю начнет действовать после следующего входа этого пользователя в пользовательскую сессию.