Перейти к основному содержимому

Роли базы данных

:::{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). Часто удобно поддерживать соответствие между именами ролей и пользователей ОС.

Возможность выбора конкретных ролей для подключения регулируется правилами аутентификации клиента, описанными в разделе «Аутентификация клиентского приложения». Клиент не обязан выбирать роль, совпадающую с именем своего пользователя ОС, аналогично тому, как имя человека не обязано совпадать с его настоящим именем. Учитывая важность распределения полномочий, связанных с ролями, тщательное проектирование политики прав доступа крайне важно при проектировании многопользовательской среды.