Введение.
Изучая основы работы сервера PostgreSQL, переходим к рассмотрению вопросов обеспечения безопасности пользователей использующих БД PgSQL. В статье PostgreSQL Linux часть 4, мы будем рассматривать такие важные понятия как пользователи и роли.
Основу защиты учётных записей пользователей PgSQL формируют пользовательские роли и пароли.
Все статьи посвящённые PostgreSQL см.
тэг БД или поиск postgres
Подготовка PostgreSQL Linux часть 4.
- Стенд
- Cервер ALT Linux, имя: lin-pq; IP 10.0.2.11;
- Simply Linux, имя: lin-sl, IP=10.0.2.30
- Пользователь, имя: trt
- Cервер ALT Linux, имя: lin-pq; IP 10.0.2.11;
Роль — это пользователь СУБД или, если пользоваться терминологией ОС Linux, Windows — группа. Роли не связаны с именами пользователей ОС. Роли являются общими объектами для PgSQL, могут подключаться к разным базам и быть владельцами для объектов различных БД.
Команды управления ролями PostgreSQL Linux часть 4.
- Список основных команд для управления ролями:
- CREATE ROLE — вызывается из psql
- DROP ROLE — вызывается из psql
- ALTER ROLE — вызывается из psql
- createuser — вызываются из командной строки ОС
- dopuser — вызываются из командной строки ОС
- CREATE ROLE — создать роль в базе данных
- CREATE ROLE имя [ [WITH] параметр [ …] ]
- параметр
- LOGIN — вход на сервер
- SUPERUSER — суперпользователь
- CREATEDB — создавать базы данных
- CREATEROLE — создавать, изменять, удалять роли
- REPLICATION — выполнять репликации
- и другие…
- параметр
- CREATE ROLE имя [ [WITH] параметр [ …] ]
Параметры (атрибуты) имеют два варианта, пример, CREATEDB (дает право на создание БД) и NOCREATEDB (не дает такого права), по умолчанию выбирается ограничивающий вариант.
- DROP ROLE — удалить роль в базе данных
- DROP ROLE [ IF EXISTS ] имя [, …]
- IF EXISTS — не считать ошибкой, если роль не существует
- DROP ROLE [ IF EXISTS ] имя [, …]
- ALTER ROLE — изменяет атрибуты роли
- ALTER ROLE имя [ [WITH] параметр [ …] ]
- параметр
- SUPERUSER
- NOSUPERUSER
- CREATEDB
- NOCREATEDB
- CREATEROLE
- NOCREATEROLE
- INHERIT
- NOINHERIT
- LOGIN
- NOLOGIN
- REPLICATION
- NOREPLICATION
- BYPASSRLS
- NOBYPASSRLS
- CONNECTION LIMIT предел_подключений
- [ ENCRYPTED ] PASSWORD ‘пароль‘
- PASSWORD NULL
- VALID UNTIL ‘дата_время‘
- параметр
- createuser — создать новую учётную запись PostgreSQL
- createuser [параметр…] [имя_пользователя]
- параметр
- -c номер количество соединений
- -d может создавать базы данных
- -D не может создавать базы данных
- -g role роль, к которой будет добавлена текущая роль
- -i наследовать права ролей
- -I не наследовать права ролей
- -l может подключаться к серверу
- -L не может подключаться к серверу
- -r может создавать, изменять и удалять роли
- -R не может создавать, изменять и удалять роли
- -s имеет права суперпользователя
- -S не имеет права суперпользователя
- —interactive диалоговый режим для параметров
- и другие…
- параметр
- createuser [параметр…] [имя_пользователя]
createuser — та же функциональность, что и команда CREATE ROLE
- dopuser — удалить учётную запись пользователя PostgreSQL
- dropuser [параметр…] [имя_пользователя]
- параметр
- -i диалоговый режим
- -e журнал выполнения команд
- параметр
- dropuser [параметр…] [имя_пользователя]
dopuser — та же функциональность, что и команда DROP ROLE
Управление ролями PostgreSQL Linux часть 4.
Перейдём к практическим действиям использования ролей. Для начала посмотрим, какие роли, пользователи, БД существуют после установки и первичной настройки PgSQL.
Для сокращения фрагментации кода, строки
будут в дальнейшем опущены, мы внутри psql$ sudo su - postgres -s /bin/bash -bash-4.4$ psql
$ postgres=# \l
Список баз данных
Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа
-----------+----------+-----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
template0 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
postgres=# \du
Имя роли | Атрибуты, Список ролей | Член ролей
----------+-------------------------------------------------------------------------+------------
postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {}
Создадим новую базу данных.
postgres=# CREATE DATABASE trest;
Введём в нашу БД новую роль (пользователя)
postgres=# CREATE ROLE trt LOGIN CREATEROLE;
Установим пароль для пользователя trt.
postgres=# \password trt
Введите новый пароль для пользователя "trt":**********
Повторите его:**********
Проверяем наши действия, пробуем подключится.
$ psql -U trt
Пароль пользователя trt:
...
trt=>
Используя ключ du смотрим роли.
trt=> \du
Список ролей
Имя роли | Атрибуты | Член ролей
----------+-------------------------------------------------------------------------+------------
postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {}
trt | Создаёт роли | {}
Пользователь trt не обладает привилегированной ролью, мы вынужденны, для управления, обращаться к роли postgres. Это неправильно, тем более, что консольные команды createuser и dopuser для postgres не доступны, он не имеет регистрации в OC и это хорошо. Узко — целевое значение пользователя postgres, один из элементов безопасности БД — postgres владеет только теми данными, которыми управляет сервер БД.
Рекомендуется не назначать пользователя postgres владельцем исполняемых файлов PgSQL, чтобы их нельзя было подменить в случае компрометации серверного процесса.
Не совсем удобно постоянно пользоваться записью postgres, поэтому наделим пользователя trt привилегированными ролями.
Добавление административной роли.
Пользователь trt может только создавать роли, добавим ему некоторые привилегированные права, что бы разгрузить запись postgres.
postgres=# ALTER ROLE trt SUPERUSER CREATEDB CREATEROLE;
ALTER ROLE
postgres=# \du
Список ролей
Имя роли | Атрибуты | Член ролей
----------+-------------------------------------------------------------------------+------------
postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {}
trt | Суперпользователь, Создаёт роли, Создаёт БД | {}
Заключение.
Тема управления ролями PostgreSQL широка и требует более глубокого рассмотрения. Читайте продолжение статьи в следующей части PostgreSQL Linux часть 5.