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

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

примечание

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

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