Download PDF
Download page Разграничение прав на схему БД.
Разграничение прав на схему БД
Аннотация
В данной статье рассмотрены настройки разграничения прав на базу данных (БД) в системе управления БД (СУБД) PostgreSQL, а именно:
- ограничение привилегий для уже созданного пользователя и БД;
- ограничение привилегий, если настройки среды функционирования еще не были выполнены.
Ограничение привилегий на схему БД для уже созданного пользователя
Перед установкой Termidesk должна быть настроена среда функционирования, в частности - СУБД PostgreSQL.
По умолчанию настройка выполняется таким образом, что создаваемый пользователь имеет все привилегии на БД, в том числе может передавать их другим учетным записям.
По умолчанию для Termidesk в СУБД PostgreSQL используется БД с именем termidesk
и схемой public
. Схема public
доступна пользователю БД (по умолчанию пользователь termidesk
) без дополнительных операций по выдаче прав.
Чтобы ограничить пользователя БД termidesk
только одной его БД termidesk
без возможности передачи прав на нее, нужно:
- переключиться последовательно на пользователя
root
, затем наpostgres
:
:~$ sudo -s
:/home/astra# su postgres
- запустить терминальный клиент СУБД PostgreSQL:
:/home/astra$ psql
Если после выполнения команды отображается ошибка «could not change directory to "/home/": Отказано в доступе» и не появляется приглашение командной строки postgres=#
, необходимо вместо «su postgres
» использовать конструкцию «su - postgres
». Если приглашение postgres=#
появилось, то сообщение об ошибке можно проигнорировать.
Символ «;» в конце строки в командах при работе в терминальном клиенте СУБД PostgreSQL обязателен.
- отозвать ранее назначенные привилегии:
postgres=# REVOKE ALL ON termidesk FROM termidesk;
- подключиться к нужной БД (по умолчанию
termidesk
):
postgres=# \c termidesk;
- создать новую схему БД:
В текущей реализации последней версии Termidesk поддерживается только схема public
. Поэтому этот шаг стоит пропустить, а далее, при назначении прав на схему, вместо параметра <имя_схемы>
использовать public
.
termidesk=# CREATE SCHEMA <имя_схемы>;
- назначить пользователю БД необходимые права на схему одним из вариантов:
Для назначения пользователю termidesk
всех прав на схему <имя_схемы>
выполнить:
termidesk=# GRANT ALL PRIVILEGES ON SCHEMA <имя_схемы> TO termidesk;
Для назначения пользователю 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;
Ограничение привилегий для еще не созданного пользователя
Если СУБД PostgreSQL была установлена, но БД еще не была настроена, нужно:
- переключиться последовательно на пользователя
root
, затем наpostgres
:
:~$ sudo -s
:/home/astra# su postgres
- запустить терминальный клиент СУБД PostgreSQL:
:/home/astra$ psql
Если после выполнения команды отображается ошибка «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;
- подключиться к созданной БД
termidesk
:
postgres=# \c termidesk;
- создать новую схему БД:
В текущей реализации последней версии Termidesk поддерживается только схема public
. Поэтому этот шаг стоит пропустить, а далее, при назначении прав на схему, вместо параметра <имя_схемы>
использовать public
.
termidesk=# CREATE SCHEMA <имя_схемы>;
- создать новую роль:
termidesk=# CREATE ROLE <имя_роли>;
- назначить нужные права для роли и создать пользователя
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 <имя_роли>;
где ksedimret
- пароль, использующийся по умолчанию. Может быть изменен, однако это изменение необходимо затем учесть в файле /etc/rabbitmq/definitions.json
, см. Установка и настройка RabbitMQ.