Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Astra Linux SE 1.6 Smolensk + pgAdmin3  [new]
privet.romantik
Member

Откуда:
Сообщений: 1
Всем здравствуйте.
Мне необходимо выполнить первоначальную настройку PostgreSQL с учетом мандатного управления доступом.

Вначале установил сервер и клиент БД, некоторые дополнительные скрипты и графическую утилиту pgAdmin3 для работы с БД:
sudo apt-get install postgresql postgresql-client postgresql-contrib
sudo apt-get install pgadmin3


Для удобства изменил пароль для ‘postgres’, чтобы его использовать его для задач системного администрирования.
sudo su postgres -c psql postgres
ALTER USER postgres WITH PASSWORD ‘password’;
\q


Аналогично необходимо поступить с unix-пользователем ‘postgres’, т.к. пароли должны быть одинаковыми:
sudo passwd -d postgres
sudo su postgres -c passwd


В файле /etc/postgresql/9.6/main/postgresql.conf значение параметра ac_ignore_socket_maclabel установил в false.

Для пользователя postgres необходимо выдать права на чтение информации из БД пользователей и сведений о мандатных метках и привилегиях:
usermod -a -G shadow postgres
setfacl -d -m u:postgres:r /etc/parsec/macdb
setfacl -R -m u:postgres:r /etc/parsec/macdb
setfacl -m u:postgres:rx /etc/parsec/macdb
setfacl -d -m u:postgres:r /etc/parsec/capdb
setfacl -R -m u:postgres:r /etc/parsec/capdb
setfacl -m u:postgres:rx /etc/parsec/capdb


Следующую инструкцию по настройке нашёл где-то на просторах интернета:
Создание пользователей ОС для тестирования настроенного PostgreSQL:
пытался их создать через терминал, но не получилось, надо определиться с необходимым количеством флагов которые надо задать при создании пользователя, такие как создание домашнего каталога, принадлежность к группам и т.п., поэтому создал пользователей u_0, u_1, u_2 и dbsa через графический интерфейс.

Задал каждому пользователю свои мандатные метки:
{0,0} для u_0:
sudo usermac -m 0:0 -c 0:0 u_0


{0,1} для u_1:
sudo usermac -m 0:0 -c 1:1 u_1


{1,1} для u_2:
sudo usermac -m 1:1 -c 1:1 u_2


{2,3} для dbsa:
sudo usermac -m 0:2 -c 0:3 dbsa
sudo usercaps -m +2, +3, +4, +5 dbsa #пока не разбирался что именно делает эта команда


Подключение к серверу:
sudo su postgres -c psql postgres


Скрипт работы с БД с комментариями:
+
Создаем пользователей:
CREATE USER u_0 WITH password 'password';
CREATE USER u_1 WITH password 'password';
CREATE USER u_2 WITH password 'password';
CREATE USER dbsa WITH password 'password';


Создаем тестовую базу данных:
CREATE DATABASE mtest;


Подключаемся к тестовой базе данных:
\connect mtest


1.3.1 Настройка мандатных атрибутов
Устанавливаем мандатную метку кластера:
MAC LABEL ON CLUSTER IS '{3, 3}';


сбрасываем признак MAC CCR кластера:
MAC CCR ON CLUSTER IS OFF;


Устанавливаем метку базы данных:
MAC LABEL ON DATABASE mtest IS '{2, 3}';


сбрасываем признак MAC CCR у базы данных:
MAC CCR ON DATABASE mtest IS OFF;


Устанавливаем метку схемы public:
MAC LABEL ON SCHEMA public IS '{2,3}';


Сбрасываем признак MAC CCR у схемы public:
MAC CCR ON SCHEMA public IS OFF;


Устанавливаем метку табличного пространства pg_default:
MAC LABEL ON TABLESPACE pg_default IS '{2, 3}';


Сбрасываем признак MAC CCR у табличного пространства pg_default:
MAC CCR ON TABLESPACE pg_default IS OFF;


Создаем схему для уровня {0,0}:
CREATE SCHEMA "Схема_0_00";
GRANT ALL ON SCHEMA "Схема_0_00" TO PUBLIC;


Создаем схему для уровня {1,1}:
CREATE SCHEMA "Cxema_1_01";
MAC LABEL ON SCHEMA "Cxema_1_01" IS '{1,1}';
MAC CCR ON SCHEMA "Cxema_1_01" IS OFF;
GRANT ALL ON SCHEMA "Cxema_1_01" TO PUBLIC;


1.3.2 Создание тестовой таблицы
Создаем проверочную таблицу с защищенными строками:
CREATE TABLE "Проверка" ("идентификатор" INTEGER PRIMARY KEY, "данные" TEXT)
WITH (MACS=TRUE);
GRANT ALL ON "Проверка" TO PUBLIC;


Устанавливаем метку таблицы "Проверка":
MAC LABEL ON TABLE "Проверка" IS '{2,3}';


Сбрасываем признак MAC CCR у таблицы "Проверка":
MAC CCR ON TABLE "Проверка" IS OFF;


Скрипт без описаний команд:
+

CREATE USER u_0 WITH password 'password';
CREATE USER u_1 WITH password 'password';
CREATE USER u_2 WITH password 'password';
CREATE USER dbsa WITH password 'password';
CREATE DATABASE mtest;
\connect mtest
MAC LABEL ON CLUSTER IS '{3, 3}';
MAC CCR ON CLUSTER IS OFF;
MAC LABEL ON DATABASE mtest IS '{2, 3}';
MAC CCR ON DATABASE mtest IS OFF;
MAC LABEL ON SCHEMA public IS '{2,3}';
MAC CCR ON SCHEMA public IS OFF;
MAC LABEL ON TABLESPACE pg_default IS '{2, 3}';
MAC CCR ON TABLESPACE pg_default IS OFF;
CREATE SCHEMA "Схема_0_00";
GRANT ALL ON SCHEMA "Схема_0_00" TO PUBLIC;
CREATE SCHEMA "Схема_1_01";
MAC LABEL ON SCHEMA "Схема_1_01" IS '{1,1}';
MAC CCR ON SCHEMA "Схема_1_01" IS OFF;
GRANT ALL ON SCHEMA "Схема_1_01" TO PUBLIC;
CREATE TABLE "Проверка" ("идентификатор" INTEGER PRIMARY KEY, "данные" TEXT)
WITH (MACS=TRUE);
GRANT ALL ON "Проверка" TO PUBLIC;
MAC LABEL ON TABLE "Проверка" IS '{2,3}';
MAC CCR ON TABLE "Проверка" IS OFF;


Скрипт всё создал без ошибок, но команды выключения CCR не имели никаких последствий.

Непонятная ситуация возникает при работе с БД через pgAdmin3:
Допустим хочу создать таблицу любым пользователем (кроме postgres'а) при помощи нажатия ПКМ по "Таблицы" в браузере объектов и выбора "Новая таблица...". Задаю параметры таблицы по минимуму и во вкладке "SQL" окна создания таблицы формируется следующий запрос:
CREATE TABLE "Схема_1_01".test_table
(
    bigint f_column;
)
WITH (
    OIDS = FALSE,
    MACS = TRUE
)
;

ALTER TABLE "Схема_1_01".test_table OWNER TO u_2;

MAC CCR ON TABLE "Схема_1_01".test_table IS ON;


Но получаю ошибку, что отсутствуют необходимые привелегии либо мандатные атрибуты.

Если нажать на кнопку "Выполнить пользовательские SQL-запросы" и ввести там этот запрос без последней строки, то таблица создастся и если выбрать её в браузере объектов, то запрос её создания будет следующим:
CREATE TABLE "Схема_1_01".test_table
(
    bigint f_column;
)
WITH (
    OIDS = FALSE,
    MACS = TRUE
)
;

ALTER TABLE "Схема_1_01".test_table OWNER TO u_2;

MAC LABEL ON TABLE "Схема_1_01".test_table IS '{1,1}';

MAC CCR ON TABLE "Схема_1_01".test_table IS ON;


Не понимаю, что не так происходит при создании таблицы через "Новая таблица..."
Подскажите пожалуйста.
20 мар 21, 11:15    [22297633]     Ответить | Цитировать Сообщить модератору
 Re: Astra Linux SE 1.6 Smolensk + pgAdmin3  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4691
privet.romantik,

я бы просто рекомендовал все в psql command line отлаживать и если там работает а в pgadmin нет - обращаться в поддержку поставщика вашего решения (Astra Linux SE 1.6 Smolensk)

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
20 мар 21, 11:50    [22297638]     Ответить | Цитировать Сообщить модератору
 Re: Astra Linux SE 1.6 Smolensk + pgAdmin3  [new]
big-trot
Member

Откуда: Тверь
Сообщений: 293
Maxim Boguk,

Вы не можете указывать в процессе создания метки. Объекту автоматически присваивается та метка, которая соответствует метки вашей сессии.
23 мар 21, 12:10    [22298701]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить