Аннотация

В данной статье рассмотрены настройки разграничения прав на базу данных (БД) в системе управления БД (СУБД) Postgres-11, а именно:

  • ограничение привилегий для уже созданного пользователя и БД;
  • ограничение привилегий, если настройки среды функционирования (в частности Установка и настройка СУБД Postgres-11) еще не были выполнены.


Ограничение привилегий на схему БД для уже созданного пользователя

Перед установкой Termidesk должна быть настроена среда функционирования, в частности - СУБД Postgres-11. 

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

По умолчанию для Termidesk в СУБД Postgres-11 используется БД с именем termidesk и схемой public. Схема public доступна пользователю БД (по умолчанию пользователь termidesk) без дополнительных операций по выдаче прав.

Чтобы ограничить пользователя БД termidesk только одной его БД termidesk без возможности передачи прав на нее, нужно:

  • переключиться последовательно на пользователя root, затем на postgres:
:~$ sudo -s
:/home/astra# su postgres
BASH
  • запустить терминальный клиент СУБД Postgres-11:
:/home/astra$ psql
BASH

Если после выполнения команды отображается ошибка «could not change directory to "/home/": Отказано в доступе» и не появляется приглашение командной строки postgres=#, необходимо вместо «su postgres» использовать конструкцию «su - postgres».  Если приглашение postgres=# появилось, то сообщение об ошибке можно проигнорировать.

Символ «;» в конце строки в командах при работе в терминальном клиенте СУБД Postgres-11 обязателен.

  • отозвать ранее назначенные привилегии:
postgres=# REVOKE ALL ON termidesk FROM termidesk;
BASH
  • подключиться к нужной БД (по умолчанию termidesk):
postgres=# \c termidesk;
BASH
  • создать новую схему БД:

В текущей реализации последней версии Termidesk поддерживается только схема public. Поэтому этот шаг стоит пропустить, а далее, при назначении прав на схему, вместо параметра <имя_схемы> использовать public.

termidesk=# CREATE SCHEMA <имя_схемы>;
BASH
  • назначить пользователю БД необходимые права на схему одним из вариантов:

Для назначения пользователю termidesk  всех прав на схему <имя_схемы> выполнить:

termidesk=# GRANT ALL PRIVILEGES ON SCHEMA <имя_схемы> TO termidesk;
BASH

Для назначения пользователю termidesk прав на создание объектов и операций с таблицами/последовательностями в схеме <имя_схемы> выполнить:

termidesk=# GRANT CREATE, USAGE ON SCHEMA <имя_схемы> TO termidesk;
termidesk=# GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE ON ALL TABLES IN SCHEMA <имя_схемы> TO termidesk;
termidesk=# GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA <имя_схемы> TO termidesk;
BASH

Ограничение привилегий для еще не созданного пользователя

Если СУБД Postgres-11 была установлена, но еще не был выполнен пункт по ее настройке (см. Установка и настройка СУБД Postgres-11), нужно:

  • переключиться последовательно на пользователя root, затем на postgres:
:~$ sudo -s
:/home/astra# su postgres
BASH
  • запустить терминальный клиент СУБД Postgres-11:
:/home/astra$ psql
BASH

Если после выполнения команды отображается ошибка «could not change directory to "/home/": Отказано в доступе» и не появляется приглашение командной строки postgres=#, необходимо вместо «su postgres» использовать конструкцию «su - postgres».  Если приглашение postgres=# появилось, то сообщение об ошибке можно проигнорировать.

Символ «;» в конце строки в командах при работе в терминальном клиенте СУБД Postgres-11 обязателен.

  • используя интерактивный интерфейс терминального клиента СУБД, создать БД termidesk с шаблоном template0 (символ «;» в конце строки при работе с интерактивным интерфейсом обязателен):
postgres=# CREATE DATABASE termidesk LC_COLLATE 'ru_RU.utf8' LC_CTYPE 'ru_RU.utf8' TEMPLATE template0;
BASH
  • подключиться к созданной БД termidesk:
postgres=# \c termidesk;
BASH
  • создать новую схему БД:

В текущей реализации последней версии Termidesk поддерживается только схема public. Поэтому этот шаг стоит пропустить, а далее, при назначении прав на схему, вместо параметра <имя_схемы> использовать public.

termidesk=# CREATE SCHEMA <имя_схемы>;
BASH
  • создать новую роль:
termidesk=# CREATE ROLE <имя_роли>;
BASH
  • назначить нужные права для роли и создать пользователя termidesk:
termidesk=# GRANT CREATE, USAGE ON SCHEMA <имя_схемы> TO <имя_роли>;
termidesk=# GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE ON ALL TABLES IN SCHEMA <имя_схемы> TO <имя_роли>;
termidesk=# GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA <имя_схемы> TO <имя_роли>;
termidesk=# CREATE USER termidesk WITH PASSWORD 'ksedimret' IN ROLE <имя_роли>;
BASH

где ksedimret - пароль, использующийся по умолчанию. Может быть изменен, однако это изменение необходимо затем учесть в файле /etc/rabbitmq/definitions.json, см. Установка и настройка RabbitMQ.