createuser
createuser — создать новую учётную запись PostgreSQL
Синтаксис
createuser
[параметр-подключения
...] [параметр
...] [имя_пользователя
]
Описание
createuser создаёт нового пользователя PostgreSQL, а если точнее — роль. Лишь суперпользователь и пользователи с привилегией CREATEROLE
могут создавать новые роли, таким образом, createuser должна запускаться от их лица.
Чтобы создать роль с правом SUPERUSER
, REPLICATION
или BYPASSRLS
, необходимо подключиться от имени существующего суперпользователя, одного лишь права CREATEROLE
недостаточно. Поскольку суперпользователи могут обходить все ограничения доступа в базе данных, к назначению этих полномочий не следует относиться легкомысленно.
createuser — это обёртка для SQL-команды CREATE ROLE. Создание пользователей с её помощью по сути не отличается от выполнения того же действия при обращении к серверу другими способами.
Параметры
createuser принимает следующие аргументы:
имя_пользователя
Задаёт имя создаваемого пользователя PostgreSQL. Это имя должно отличаться от имён всех существующих ролей в данной инсталляции PostgreSQL.
-c
номер
--connection-limit=
номер
Устанавливает максимальное допустимое количество соединений для создаваемого пользователя. По умолчанию ограничение в количестве соединений отсутствует.
-d
--createdb
Разрешает новому пользователю создавать базы данных.
-D
--no-createdb
Запрещает новому пользователю создавать базы данных. Это поведение по умолчанию.
-e
--echo
Вывести команды к серверу, генерируемые при выполнении createuser.
-E
--encrypted
Параметр является устаревшим, но в целях совместимости ещё работает.
-g
role
--role=
role
Указывает роль, к которой будет добавлена текущая роль в качестве члена группы. Допускается множественное использование флага
-g
.-i
--inherit
Создаваемая роль автоматически унаследует права ролей, в которые она включается. Это поведение по умолчанию.
-I
--no-inherit
Роль не будет наследовать права ролей, в которые она включается.
--interactive
Запросить имя для создаваемого пользователя, а также значения для флагов
-d
/-D
,-r
/-R
,-s
/-S
, если они явно не указаны в командной строке. До версии PostgreSQL 9.1 включительно это было поведением по умолчанию.-l
--login
Новый пользователь сможет подключаться к серверу (то есть его имя может быть идентификатором начального пользователя сеанса). Это свойство по умолчанию.
-L
--no-login
Новый пользователь не сможет подключаться к серверу. (Роль без права входа на сервер тем не менее полезна для управления разрешениями в базе данных.)
-P
--pwprompt
Если флаг указан, то createuser запросит пароль для создаваемого пользователя. Если не планируется аутентификация по паролю, то пароль можно не устанавливать.
-r
--createrole
Новый пользователь сможет создавать, изменять и удалять другие роли, добавлять для них комментарии и изменять метку безопасности, а также выдавать или отбирать членство в любых ролях (то есть этот пользователь будет иметь право
CREATEROLE
). Подробнее возможности, предоставляемые этим правом, описаны в Создание роли.-R
--no-createrole
Запрещает пользователю создавать новые роли. Это поведение по умолчанию.
-s
--superuser
Создаваемая роль будет иметь права суперпользователя.
-S
--no-superuser
Новый пользователь не будет суперпользователем. Это поведение по умолчанию.
-V
--version
Вывести версию createuser и завершить выполнение.
--replication
Создаваемый пользователь будет наделён правом
REPLICATION
. Это рассмотрено подробнее в документации по CREATE ROLE.--no-replication
Создаваемый пользователь не будет иметь привилегии
REPLICATION
. Это рассмотрено подробнее в документации по CREATE ROLE.-?
--help
Вывести помощь по команде createuser.
createuser также принимает из командной строки параметры подключения:
-h
сервер
--host=
сервер
Указывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
-p
порт
--port=
порт
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения.
-U
имя_пользователя
--username=
имя_пользователя
Имя пользователя для подключения (не имя создаваемого пользователя).
-w
--no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл
.pgpass
, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.-W
--password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как createuser запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако чтобы понять это, createuser лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести
-W
, чтобы исключить эту ненужную попытку подключения.
Переменные окружения
PGHOST
PGPORT
PGUSER
Параметры подключения по умолчанию
Эта утилита, как и большинство других утилит PostgreSQL, также использует переменные среды, поддерживаемые libpq (см. Раздел 34.14).
Диагностика
В случае возникновения трудностей, обратитесь к CREATE ROLE и psql. Переменные окружения и параметры подключения по умолчанию libpq будут применены при запуске утилиты, это следует учитывать при диагностике.
Примеры
Чтобы создать роль joe
на сервере, используемом по умолчанию:
$
createuser joe
Чтобы создать роль joe
на сервере, используемом по умолчанию, с запросом дополнительных параметров:
$
createuser --interactive joe
Назначить роль суперпользователем? (y/n)
n
Разрешить новой роли создавать базы данных? (y/n)
n
Разрешить новой роли создавать другие роли? (y/n)
n
Чтобы создать того же пользователя joe
с явно заданными атрибутами, подключившись к компьютеру eden
, порту 5000:
$
createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
Чтобы создать роль joe
с правами суперпользователя и предустановленным паролем:
$
createuser -P -s -e joe
Введите пароль для новой роли:
xyzzy
Повторите его:
xyzzy
CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
В приведённом примере введённый пароль отображается лишь для отражения сути, на деле же он не выводится на экран. Как можно видеть, он шифруется прежде чем передаётся в команде клиенту.