Роли базы данных
- :::{note} Эта страница переведена при помощи нейросети GigaChat.
- ::
Роли базы данных совершенно независимы от пользователей операционной системы. На практике иногда полезно соблюдать соответствие между ними, но это необязательно. Роли действуют на уровне всего кластера баз данных, а не какой-то конкретной базы. Создание новой роли осуществляется с помощью SQL-команды CREATE ROLE
:
CREATE ROLE name;
Имя роли подчиняется обычным правилам SQL для идентификаторов: оно может быть простым словом без специальных символов или заключенным в двойные кавычки. (Обычно в команду добавляют дополнительные параметры, например, LOGIN
, но подробности рассмотрены позже.) Для удаления существующей роли предназначена соответствующая команда DROP ROLE
:
DROP ROLE name;
Для упрощения работы существуют утилиты createuser и dropuser. Эти программы представляют собой графические интерфейсы для соответствующих SQL-команд и могут быть запущены из консоли терминала:
createuser name
dropuser name
Полный перечень существующих ролей можно просмотреть, обратившись к системному каталогу pg_roles
, например:
SELECT rolname FROM pg_roles;
Чтобы проверить, какие роли могут подключаться к базе данных, выполните:
SELECT rolname FROM pg_roles WHERE rolcanlogin;
Кроме того, полезную информацию предоставляют специальные команды программы psql
.
Любая установка PostgreSQL изначально содержит одну предопределенную роль — суперюзера. По умолчанию она носит имя владельца операционной системы, запустившего команду initdb
, обычно это роль postgres
. Именно под этой ролью необходимо входить в систему для дальнейшего создания новых ролей.
Каждая сессия в PostgreSQL создается от имени определенной роли, которая и определяет первоначальные права доступа для запросов, выполненных в рамках сессии. Выбор роли для подключения задается приложением-клиентом при установлении соединения особым образом. Например, утилита psql
использует аргумент -U
для указания нужной роли. Во многих приложениях подразумевается использование имени текущего пользователя операционной системы (так делают psql
и createuser
). Часто удобно поддерживать соответствие между именами ролей и пользователей ОС.
Возможность выбора конкретных ролей для подключения регулируется правилами аутентификации клиента, описанными в разделе «Аутентификация клиентского приложения». Клиент не обязан выбирать роль, совпадающую с именем своего пользователя ОС, аналогично тому, как имя человека не обязано совпадать с его настоящим именем. Учитывая важность распределения полномочий, связанных с ролями, тщательное проектирование политики прав доступа крайне важно при проектировании многопользовательской среды.