Иллюстрированный самоучитель по PostgreSQL

Управление пользователями

Создание пользователей командой SQL CREATE USER

Команда CREATE USER имеет всего один обязательный параметр – имя нового пользователя. Ей также можно передать множество других параметров, в том числе пароль, системный идентификатор, группу и права, назначаемые новому пользователю. Полный синтаксис команды CREATE USER выглядит так:

CREATE USER пользователь [ WITH [ SYSID aid ]
[ PASSWORD 'пароль' ] ]
[ CREATEDB | NOCREATEDB ]
[ CREATEUSER | NOCREATEUSER ]
[ IN GROUP группа [….] ]
[ VALID UNTIL 'срок' ]

Имя создаваемого пользователя определяется параметром пользователь. В системе не допускается присутствие двух пользователей с одинаковыми именами. За ключевым словом WITH следуют секции SYSID и/или PASSWORD.

Все остальные необязательные секции могут следовать в произвольном порядке (ключевое слово WITH для них не обязательно). Ниже перечислены все необязательные ключевые слова.

  • SYSID uid. Пользователю назначается системный идентификатор aid. Если значение не указано, выбирается некоторое уникальное число.
  • PASSWORD ' пароль'. Новому пользователю назначается заданный пароль. Если значение не указано, по умолчанию используется пароль NULL.
  • CREATEDB | NOCREATEDB. Ключевое слово CREATEDB предоставляет новому пользователю право создания баз данных, а также право уничтожения принадлежащих ему баз данных. Ключевое слово NOCREATEDB явно указывает на отсутствие такого права (используется по умолчанию).
  • CREATEUSER | NOCREATEUSER. Ключевое слово CREATEUSER предоставляет пользователю право создания пользователей, наделяя его тем самым правами суперпользователя. Пользователь с правом создания других пользователей обладает всеми правами во всех базах данных (включая право создания баз данных, даже если было указано ключевое слово NOCREATEDB). Ключевое слово NOCREATEUSER явно указывает на отсутствие права создания новых пользователей.
  • IN GROUP группа […. ]. Новый пользователь включается в группу с заданным именем. Допускается перечисление нескольких групп через запятую. Чтобы создание пользователя прошло успешно, перечисленные группы должны существовать.
  • VALID UNTIL 'срок'. Пароль пользователя становится недействительным в указанный момент, который задается в одном из поддерживаемых форматов времени. По истечении срока действия пароль необходимо сменить.
  • VALID UNTIL 'infinity'. Срок действия пароля не ограничивается.

При отсутствии ключевых слов CREATEDB и CREATEUSER создается "обычный" пользователь, не обладающий особыми привилегиями. Он не может ни создавать, ни уничтожать базы данных и других пользователей. Обычные пользователи могут подключаться к базам данных PostgreSQL, но при этом они могут выполнять лишь те команды, выполнение которых им было разрешено (см. раздел "Предоставление привилегий" этой главы).

В листинге 10.1 создается обычный пользователь с именем salesuser и паролем N0rm4!, заданным в секции WITH PASSWORD. Секция VALID UNTIL отсутствует, поэтому пароль остается действительным в течение неограниченного времени.

Листинг 10.1. Создание обычного пользователя.

tempiatel=# CREATE USER dbuser CREATEDB
tempiatel-# WITH PASSWORD 'DbuSSr'
tempiatel-# VALID UNTIL '2002-11-11';
CREATE USER

Сообщение CREATE USER, выданное сервером, означает, что пользователь был создан успешно. Также возможны сообщения об ошибках.

  • ERROR: CREATEUSER: permission denied. Сообщение выводится в том случае, если команда CREATE USER не была введена суперпользователем. Только суперпользователь имеет право создавать новых пользователей.
  • ERROR: CREATE USER: user name "salesuser" already exists. Пользователь с указанным именем уже существует.

Если в PostgreSQL требуется создать пользователя, которому разрешено создавать базы данных, но запрещено создавать и уничтожать пользователей PostgreSQL, укажите ключевое слово CREATEDB вместо CREATEUSER. Пользователь сможет создавать базы данных, а также уничтожать базы данных, принадлежащие ему. Операции создания и удаления баз данных рассматривались в главе 9.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.