createuser — define a new PostgreSQL user account
Synopsis
createuser
[connection-option
…] [option
…] [username
]
Description
createuser creates a new PostgreSQL user (or more precisely, a role). Only superusers and users with CREATEROLE
privilege can create new users, so createuser must be invoked by someone who can connect as a superuser or a user with CREATEROLE
privilege.
If you wish to create a new superuser, you must connect as a superuser, not merely with CREATEROLE
privilege. Being a superuser implies the ability to bypass all access permission checks within the database, so superuser access should not be granted lightly.
createuser is a wrapper around the SQL command CREATE ROLE
. There is no effective difference between creating users via this utility and via other methods for accessing the server.
Options
createuser accepts the following command-line arguments:
username
-
Specifies the name of the PostgreSQL user to be created. This name must be different from all existing roles in this PostgreSQL installation.
-c
number
--connection-limit=
number
-
Set a maximum number of connections for the new user. The default is to set no limit.
-d
--createdb
-
The new user will be allowed to create databases.
-D
--no-createdb
-
The new user will not be allowed to create databases. This is the default.
-e
--echo
-
Echo the commands that createuser generates and sends to the server.
-E
--encrypted
-
This option is obsolete but still accepted for backward compatibility.
-g
role
--role=
role
-
Indicates role to which this role will be added immediately as a new member. Multiple roles to which this role will be added as a member can be specified by writing multiple
-g
switches. -i
--inherit
-
The new role will automatically inherit privileges of roles it is a member of. This is the default.
-I
--no-inherit
-
The new role will not automatically inherit privileges of roles it is a member of.
--interactive
-
Prompt for the user name if none is specified on the command line, and also prompt for whichever of the options
-d
/-D
,-r
/-R
,-s
/-S
is not specified on the command line. (This was the default behavior up to PostgreSQL 9.1.) -l
--login
-
The new user will be allowed to log in (that is, the user name can be used as the initial session user identifier). This is the default.
-L
--no-login
-
The new user will not be allowed to log in. (A role without login privilege is still useful as a means of managing database permissions.)
-P
--pwprompt
-
If given, createuser will issue a prompt for the password of the new user. This is not necessary if you do not plan on using password authentication.
-r
--createrole
-
The new user will be allowed to create new roles (that is, this user will have
CREATEROLE
privilege). -R
--no-createrole
-
The new user will not be allowed to create new roles. This is the default.
-s
--superuser
-
The new user will be a superuser.
-S
--no-superuser
-
The new user will not be a superuser. This is the default.
-V
--version
-
Print the createuser version and exit.
--replication
-
The new user will have the
REPLICATION
privilege, which is described more fully in the documentation for CREATE ROLE. --no-replication
-
The new user will not have the
REPLICATION
privilege, which is described more fully in the documentation for CREATE ROLE. -?
--help
-
Show help about createuser command line arguments, and exit.
createuser also accepts the following command-line arguments for connection parameters:
-h
host
--host=
host
-
Specifies the host name of the machine on which the server is running. If the value begins with a slash, it is used as the directory for the Unix domain socket.
-p
port
--port=
port
-
Specifies the TCP port or local Unix domain socket file extension on which the server is listening for connections.
-U
username
--username=
username
-
User name to connect as (not the user name to create).
-w
--no-password
-
Never issue a password prompt. If the server requires password authentication and a password is not available by other means such as a
.pgpass
file, the connection attempt will fail. This option can be useful in batch jobs and scripts where no user is present to enter a password. -W
--password
-
Force createuser to prompt for a password (for connecting to the server, not for the password of the new user).
This option is never essential, since createuser will automatically prompt for a password if the server demands password authentication. However, createuser will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing
-W
to avoid the extra connection attempt.
Environment
PGHOST
PGPORT
PGUSER
-
Default connection parameters
PG_COLOR
-
Specifies whether to use color in diagnostic messages. Possible values are
always
,auto
andnever
.
This utility, like most other PostgreSQL utilities, also uses the environment variables supported by libpq (see Section 34.15).
Diagnostics
In case of difficulty, see CREATE ROLE and psql for discussions of potential problems and error messages. The database server must be running at the targeted host. Also, any default connection settings and environment variables used by the libpq front-end library will apply.
Examples
To create a user joe
on the default database server:
$
createuser joe
To create a user joe
on the default database server with prompting for some additional attributes:
$
createuser --interactive joe
Shall the new role be a superuser? (y/n)
n
Shall the new role be allowed to create databases? (y/n)
n
Shall the new role be allowed to create more new roles? (y/n)
n
To create the same user joe
using the server on host eden
, port 5000, with attributes explicitly specified, taking a look at the underlying command:
$
createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
To create the user joe
as a superuser, and assign a password immediately:
$
createuser -P -s -e joe
Enter password for new role:
xyzzy
Enter it again:
xyzzy
CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
In the above example, the new password isn’t actually echoed when typed, but we show what was typed for clarity. As you see, the password is encrypted before it is sent to the client.
CREATE USER — define a new database role
Synopsis
CREATE USERname
[ [ WITH ]option
[ ... ] ] whereoption
can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit
| [ ENCRYPTED ] PASSWORD 'password
' | PASSWORD NULL | VALID UNTIL 'timestamp
' | IN ROLErole_name
[, ...] | IN GROUProle_name
[, ...] | ROLErole_name
[, ...] | ADMINrole_name
[, ...] | USERrole_name
[, ...] | SYSIDuid
Description
CREATE USER
is now an alias for CREATE ROLE
. The only difference is that when the command is spelled CREATE USER
, LOGIN
is assumed by default, whereas NOLOGIN
is assumed when the command is spelled CREATE ROLE
.
Compatibility
The CREATE USER
statement is a PostgreSQL extension. The SQL standard leaves the definition of users to the implementation.
Обновлено: 17.09.2021
Опубликовано: 20.07.2016
Что такое PostgreSQL простыми словами.
Создание пользователя
Использование групп
Редактирование пользователя
Удаление пользователя или группы
Особые права
Для резервного копирования
Графический интерфейс
Часть нижеописанных операций нужно выполнять в командной оболочке PostgreSQL. Она может быть запущена от пользователя postgres — чтобы войти в систему от данного пользователя, вводим:
su — postgres
* если система выдаст ошибку, связанную с нехваткой прав, сначала повышаем привилегии командой sudo su или su.
Теперь запускаем командную оболочку PostgreSQL:
$ psql -Upostgres template1
* в данном примере, вход выполняется от учетной записи postgres к шаблонной базе template1.
Для просмотра всех пользователей СУБД:
=# select * from pg_user;
Создание нового пользователя
Для того, чтобы была возможность подключения к СУБД PostgreSQL от нового пользователя, необходимо создать данного пользователя, назначить ему права, выполнить настройку файла pg_hba.conf.
1. Создание пользователя
а) Добавление новой роли (пользователя) из оболочки SQL:
=# CREATE USER dmosk WITH PASSWORD ‘myPassword’;
* в примере создана роль dmosk с паролем myPassword.
б) Добавление новой роли (пользователя) из командной строки Linux:
createuser -P dmosk
2. Назначение прав на использование базы данных
Даем права на базу командой:
=# GRANT ALL PRIVILEGES ON DATABASE «database1» to dmosk;
Теперь подключаемся к базе, к которой хотим дать доступ:
=# c database1
* в примере подсоединимся к базе с названием database1.
а) Так мы добавим все права на использование всех таблиц в базе database1 учетной записи dmosk:
database1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO «dmosk»;
* в большинстве случаев, используется схема по умолчанию public. Но администратор может создать новую схему. Это нужно учитывать при назначении прав.
б) Также можно дать доступ к базе для определенных таблиц:
database1=# GRANT ALL PRIVILEGES ON TABLE table1 IN SCHEMA public TO «dmosk»;
* в данном примере мы даем права на таблицу table1.
Выходим из SQL-оболочки:
database1=# q
3. Настройка файла pg_hba.conf
Для возможности подключиться к СУБД от созданного пользователя, необходимо проверить настройки прав в конфигурационном файле pg_hba.conf.
Для начала смотрим путь расположения данных для PostgreSQL:
=# SHOW config_file;
В ответ мы получим, что-то на подобие:
——————————————
/var/lib/pgsql/9.6/data/postgresql.conf
(1 row)
* в данном примере /var/lib/pgsql/9.6/data/ — путь расположения конфигурационных файлов.
Открываем pg_hba.conf:
vi /var/lib/pgsql/9.6/data/pg_hba.conf
Добавляем права на подключение нашему созданному пользователю:
…
# IPv4 local connections:
host all dmosk 127.0.0.1/32 md5
…
* в данном примере мы разрешили подключаться пользователю dmosk ко всем базам на сервере (all) от узла 127.0.0.1 (localhost) с требованием пароля (md5).
* необходимо, чтобы данная строка была выше строки, которая прописана по умолчанию
host all all 127.0.0.1/32 ident.
После перезапускаем службу:
systemctl restart postgresql-9.6
* в данном примере установлен postgresql версии 9.6, для разных версий на разных операционных системах команды для перезапуска сервиса могут быть разные.
4. Проверка
Для теста пробуем подключиться к Postgre с помощью созданного пользователя:
psql -Udmosk template1 -h127.0.0.1
Настройка прав доступа к базе с помощью групп
Сначала создадим групповую роль:
=# CREATE ROLE «myRole» NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
* данной командой создана группа myRole с минимальными правами.
Теперь добавим ранее созданного пользователя dmosk в эту группу:
=# GRANT «myRole» TO dmosk;
Подключимся к базе данных, для которой хотим настроить права
=# c database1
и предоставим все права для группы myRole всем таблицам базы database1
database1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO GROUP «myRole»;
Редактирование пользователя
1. Смена пароля
Рассмотрим несколько примеров смены пароля пользователя.
Одной командой:
=# ALTER USER postgres PASSWORD ‘password’
* в данном примере мы зададим пароль password для пользователя postgres.
С запросов ввода пароля:
=# password postgres
* после ввода данной команды система потребует дважды ввести пароль для пользователя (в нашем примере, postgres).
Из командной строки Linux:
sudo -u postgres psql -U postgres -d postgres -c «ALTER USER postgres PASSWORD ‘password'»
* по сути, мы выполняем также запрос в оболочке sql.
Удаление пользователей и групп
Удаление пользователя выполняется следующей командой:
=# DROP USER dmosk;
Забрать права:
database1=# REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM «dmosk»;
* обратите внимание, данный запрос отличается от предоставления прав двумя моментами: 1) вместо GRANT пишем REVOKE; 2) вместо TO «dmosk» пишем FROM «dmosk»;
Назначение особых прав пользователям PostgreSQL
Помимо ALL PRIVILEGES можно выдавать права на особые операции, например:
=# GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO «dmosk»;
* команда позволит выдать права на получение данных, их обновление и добавление. Другие операции, например, удаление будут запрещены для пользователя dmosk.
Назначение прав для определенной таблицы:
database1=# GRANT ALL PRIVILEGES ON table_users TO «dmosk»;
* в данном примере мы предоставим все права на таблицу table_users в базе данных database1;
Учетная запись для резервного копирования
Для выполнения резервного копирования лучше всего подключаться к базе с минимальными привилегиями.
Сначала создаем роль, которую будем использовать для выполнения резервного копирования:
=# CREATE USER bkpuser WITH PASSWORD ‘bkppasswd’;
* мы создадим учетную запись bkpuser с паролем bkppasswd.
Предоставляем права на подключения к базе
=# GRANT CONNECT ON DATABASE database TO bkpuser;
* в данном примере к базе database.
Подключаемся к базе (в нашем примере database):
=# c database
Даем права на все последовательности в схеме:
=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO bkpuser;
* мы дали права для схемы public. Это схема является схемой по умолчанию, но в вашем случае она может быть другой. В таком случае, подставляем свое значение.
Графический интерфейс
Иногда проще воспользоваться программой для выставления прав и работы с PostgreSQL. Могу посоветовать приложение pgAdmin. Оно позволит в оконном режиме не только создать и удалить пользователей, но и полноценно работать с СУБД.
PostgreSQL — это бесплатная объектно-реляционная СУБД с мощным функционалом, который позволяет конкурировать с платными базами данных, такими как Microsoft SQL, Oracle. PostgreSQL поддерживает пользовательские данные, функции, операции, домены и индексы. В данной статье мы рассмотрим установку и краткий обзор по управлению базой данных PostgreSQL. Мы установим СУБД PostgreSQL в Windows 10, создадим новую базу, добавим в неё таблицы и настроим доступа для пользователей. Также мы рассмотрим основы управления PostgreSQL с помощью SQL shell и визуальной системы управления PgAdmin. Надеюсь эта статья станет хорошей отправной точкой для обучения работы с PostgreSQL и использованию ее в разработке и тестовых проектах.
Содержание:
- Установка PostgreSQL 11 в Windows 10
- Доступ к PostgreSQL по сети, правила файерволла
- Утилиты управления PostgreSQL через командную строку
- PgAdmin: Визуальный редактор для PostgresSQL
- Query Tool: использование SQL запросов в PostgreSQL
Установка PostgreSQL 11 в Windows 10
Для установки PostgreSQL перейдите на сайт https://www.postgresql.org и скачайте последнюю версию дистрибутива для Windows, на сегодняшний день это версия PostgreSQL 11 (в 11 версии PostgreSQL поддерживаются только 64-х битные редакции Windows). После загрузки запустите инсталлятор.
В процессе установки установите галочки на пунктах:
- PostgreSQL Server – сам сервер СУБД
- PgAdmin 4 – визуальный редактор SQL
- Stack Builder – дополнительные инструменты для разработки (возможно вам они понадобятся в будущем)
- Command Line Tools – инструменты командной строки
Установите пароль для пользователя postgres (он создается по умолчанию и имеет права суперпользователя).
По умолчание СУБД слушает на порту 5432, который нужно будет добавить в исключения в правилах фаерволла.
Нажимаете Далее, Далее, на этом установка PostgreSQL завершена.
Доступ к PostgreSQL по сети, правила файерволла
Чтобы разрешить сетевой доступ к вашему экземпляру PostgreSQL с других компьютеров, вам нужно создать правила в файерволе. Вы можете создать правило через командную строку или PowerShell.
Запустите командную строку от имени администратора. Введите команду:
netsh advfirewall firewall add rule name="Postgre Port" dir=in action=allow protocol=TCP localport=5432
- Где rule name – имя правила
- Localport – разрешенный порт
Либо вы можете создать правило, разрешающее TCP/IP доступ к экземпляру PostgreSQL на порту 5432 с помощью PowerShell:
New-NetFirewallRule -Name 'POSTGRESQL-In-TCP' -DisplayName 'PostgreSQL (TCP-In)' -Direction Inbound -Enabled True -Protocol TCP -LocalPort 5432
После применения команды в брандмауэре Windows появится новое разрешающее правило для порта Postgres.
Совет. Для изменения порта в установленной PostgreSQL отредактируйте файл postgresql.conf по пути C:Program FilesPostgreSQL11data.
Измените значение в пункте
port = 5432
. Перезапустите службу сервера postgresql-x64-11 после изменений. Можно перезапустить службу с помощью PowerShell:
Restart-Service -Name postgresql-x64-11
Более подробно о настройке параметров в конфигурационном файле postgresql.conf с помощью тюнеров смотрите в статье.
Утилиты управления PostgreSQL через командную строку
Рассмотрим управление и основные операции, которые можно выполнять с PostgreSQL через командную строку с помощью нескольких утилит. Основные инструменты управления PostgreSQL находятся в папке bin, потому все команды будем выполнять из данного каталога.
- Запустите командную строку.
Совет. Перед запуском СУБД, смените кодировку для нормального отображения в русской Windows 10. В командной строке выполните:
chcp 1251
- Перейдите в каталог bin выполнив команду:
CD C:Program FilesPostgreSQL11bin
Основные команды PostgreSQL:
PgAdmin: Визуальный редактор для PostgresSQL
Редактор PgAdmin служит для упрощения управления базой данных PostgresSQL в понятном визуальном режиме.
По умолчанию все созданные базы хранятся в каталоге base по пути C:Program FilesPostgreSQL11database.
Для каждой БД существует подкаталог внутри PGDATA/base, названный по OID базы данных в pg_database. Этот подкаталог по умолчанию является местом хранения файлов базы данных; в частности, там хранятся её системные каталоги. Каждая таблица и индекс хранятся в отдельном файле.
Для резервного копирования и восстановления лучше использовать инструмент Backup в панели инструментов Tools. Для автоматизации бэкапа PostgreSQL из командной строки используйте утилиту pg_dump.exe.
Query Tool: использование SQL запросов в PostgreSQL
Для написания SQL запросов в удобном графическом редакторе используется встроенный в pgAdmin инструмент Query Tool. Например, вы хотите создать новую таблицу в базе данных через инструмент Query Tool.
- Выберите базу данных, в панели Tools откройте Query Tool
- Создадим таблицу сотрудников:
CREATE TABLE employee
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(30),
LastName CHARACTER VARYING(30),
Email CHARACTER VARYING(30),
Age INTEGER
);
Id — номер сотрудника, которому присвоен ключ SERIAL. Данная строка будет хранить числовое значение 1, 2, 3 и т.д., которое для каждой новой строки будет автоматически увеличиваться на единицу. В следующих строках записаны имя, фамилия сотрудника и его электронный адрес, которые имеют тип CHARACTER VARYING(30), то есть представляют строку длиной не более 30 символов. В строке — Age записан возраст, имеет тип INTEGER, т.к. хранит числа.
После того, как написали код SQL запроса в Query Tool, нажмите клавишу F5 и в базе будет создана новая таблица employee.
Для заполнения полей в свойствах таблицы выберите таблицу employee в разделе Schemas -> Tables. Откройте меню Object инструмент View/Edit Data.
Здесь вы можете заполнить данные в таблице.
После заполнения данных выполним инструментом Query простой запрос на выборку:
select Age from employee;
В этом уроке вы узнаете
- PostgreSQL Создать пользователя в PgAdmin
- PostgreSQL Создать пользовательский SQLShell (командная строка)
- Добавить существующего пользователя в базу данных
- Обновление PostgreSQL ПОЛЬЗОВАТЕЛЬ
- PostgreSQL, удаляющий пользователя
- Шпаргалка
PostgreSQL Создать пользователя в PgAdmin
Шаг 1) Щелкните правой кнопкой мыши на Login / Group Role -> Create -> Click на Login / Group Role…
Шаг 2) Введите имя для входа
Шаг 3) В области определения
- Введите пароль
- Дата истечения срока действия аккаунта
Шаг 4) В разделе привилегий
- Переключить кнопку «Войти» на «Да»
- Переключить суперпользователя на ДА
Шаг 5) В разделе SQL
- Вы увидите запрос SQL для создания пользователя в соответствии с выборами, сделанными в предыдущих шагах
- Нажмите кнопку Сохранить
Шаг 6) Роль создана и отражена в дереве объектов
Шаг 7) Создайте базу данных и назначьте на нее владельца myguru.
Шаг В командной строке вы можете увидеть владельца “myguru”
PostgreSQL Создать пользовательский SQLShell (командная строка)
Вы можете создать пользователя с помощью командной строки
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
В PostgreSQL этот метод более удобен для программистов и администраторов, поскольку они имеют доступ к консоли сервера PostgreSQL. Более того, их необходимо выполнить с помощью одной команды вместо входа в систему и использования интерфейса клиента PostgreSQL.
Syntax: CREATE USER name WITH option where the option can be: |SUPERUSER | NOSUPERUSER | CREATEROLE | NOCREATEROLE | CREATEDB | NOCREATEDB | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT | ( ENCRYPTED ] PASSWORD 'password.' | VALID UNTIL 'timestamp1 | IN ROLE role_name [, ...J | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...) | USER role_name [, ...] | SYSID uid
Пример:
CREATE USER tom;
создаст пользователя Том
CREATE USER tom WITH SUPERUSER;
Создаст пользовательский том с привилегиями суперпользователя. Давайте посмотрим на следующий пример.
Шаг 1) Мы создаем суперпользователя сроком действия до 3 – го Apri 2025 11:50:38 IST. Введите следующую команду
CREATE USER mytest WITH LOGIN SUPERUSER CREATEDB CREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 VALID UNTIL '2025-04-03T11:50:38+05:30' PASSWORD '123456';
Шаг 2) Введите команду du в контрольный список пользователей
ПРИМЕЧАНИЕ. CREATE USER аналогична команде CREATE ROLE. Разница между этими двумя командами заключается в том, что при написании команды CREATE USER она по умолчанию находится в состоянии LOGIN, тогда как NOLOGIN предполагается, когда используется опция CRETE ROLE.
Добавить существующего пользователя в базу данных
Вы можете предоставить пользователю права доступа к базе данных.
Например, мы предоставляем пользователю mytest все привилегии для пользователя guru99.
GRANT ALL PRIVILEGES ON DATABASE guru99 TO mytest;
После выполнения этой команды пользователь сможет получить доступ к базе данных с данными разрешениями.
Команда GRANT очень мощная. Вы можете дать пользователю детальные права, такие как «Выбрать», «Вставить», «Обновить».
Обновление PostgreSQL ПОЛЬЗОВАТЕЛЬ
Изменение существующих прав пользователя
Теперь, когда наш новый пользователь «mytest» существует, вы можете использовать ALTER USER для изменения разрешений, предоставленных библиотекарю.
Формат ALTER USER включает имя пользователя, за которым следуют некоторые параметры, чтобы сообщить PostgreSQL, какие допустимые изменения необходимо сделать:
ALTER USER role_specification WITH OPTION1 OPTION2 OPTION3;
Отзыв разрешений
Вам нужно использовать эту команду, когда вы делаете ошибку и неправильно назначаете разрешение, которое вы можете отозвать. Вы можете использовать команду ALTER USER без префикса перед разрешающими опциями.
Например, мы можем удалить статус SUPERUSER из mytest, например:
ALTER USER mytest WITH NOSUPERUSER;
Используя du, вы увидите, что привилегия суперпользователя удалена.
Назначение разрешения
Вы можете использовать права пользователя SUPERUSER обратно “mytest”, используя следующую команду
ALTER USER mytest WITH SUPERUSER;
Используя du, вы увидите, что привилегия суперпользователя добавлена.
PostgreSQL, удаляющий пользователя
Вы можете использовать удалить любого пользователя, если вы уверены, что конкретный пользователь больше не подходит для вашей базы данных. Обратите внимание, что удаление пользователей никогда не повлияет на реальную базу данных.
Syntax: DROP USER [user]
Чтобы удалить любого пользователя, вы должны убедиться, что он является владельцем базы данных. В противном случае вы можете получить сообщение об ошибке.
Introduction
User privilege and privilege access management is a crucial security concept for any database type. PostgreSQL handles access control through roles and privileges. For example, adding the LOGIN permission to a role yields a user. Postgres offers several ways to create and manage user accounts.
This tutorial shows how to create and set up different user types for a PostgreSQL database.
Prerequisites
- Postgres installed (follow our guide for Ubuntu or Windows).
- Access to the terminal with sudo privileges.
- Access to the postgres user.
Create a New User in PostgreSQL
There are two ways to make a new user in PostgreSQL, and both cases require access to the postgres user.
Note: The postgres user is the PostgreSQL superadmin created during the installation process.
Method 1: Using The createuser Client Utility
The first way to create a new user is with the createuser
client utility. This method avoids connecting to the PSQL command-line interface.
To create the user, run the following command in the terminal:
sudo -u postgres createuser <name>
The terminal does not output a message. To echo the server message, add the -e
tag:
sudo -u postgres createuser -e <name>
For example:
sudo -u postgres createuser -e john
Alternatively, split the command into two parts:
1. Switch to the postgres user:
sudo su - postgres
2. Run the createuser
command:
createuser <name>
Postgres automatically creates the user (role with login permissions) in both cases.
Method 2: Using PSQL
The second way to create a new user in PostgreSQL is through the interactive PSQL shell.
1. Switch to the postgres user and start the interactive terminal with:
sudo -u postgres psql
The terminal session changes to postgres=#
, indicating a successful connection to the Postgres shell.
2. Use the following statement to create a user:
CREATE USER <name>;
For example:
CREATE USER mary;
Running the command prints CREATE ROLE
to the console. The reason is that the CREATE USER
query is an alias for the following command:
CREATE ROLE <name> WITH LOGIN;
Both queries yield the same result.
Create a Superuser in PostgreSQL
To create a superuser in PostgreSQL, you must have the superuser role.
Warning: A database superuser bypasses all checks, which is dangerous from a security aspect. Use this action with care and avoid working with a superuser account unless absolutely necessary.
There are two ways to make a superuser in PostgreSQL:
1. Create a superuser role through the client utility by adding the --superuser
tag:
sudo -u postgres createuser --superuser <name>
Or use the shorthand tag -s
instead of --superuser
:
sudo -u postgres createuser -s <name>
The terminal outputs a message in case of an error or if the user already exists. If successful, no message appears.
2. Alternatively, use the CREATE USER
PSQL statement:
CREATE USER <name> SUPERUSER;
The CREATE USER
statement is an alias for the following statement:
CREATE ROLE <name> LOGIN SUPERUSER;
The CREATE ROLE
statement requires adding the LOGIN
permission to emulate a user.
Create a Password for the User
Every database user must have a strong password to prevent brute force attacks. PostgreSQL offers two methods to create a user with a password.
Warning: Out of the two methods, the first is preferred and more secure.
1. Use the createuser
client utility and add the --pwprompt
option to invoke a password creation prompt automatically:
sudo -u postgres createuser <name> --pwprompt
The shorthand version is the -P
tag:
sudo -u postgres createuser <name> -P
The terminal prompts to enter the password twice. The password itself or the length is encrypted and hidden when communicating with the server.
2. Use PSQL to create a user with a password:
CREATE USER <name> WITH PASSWORD '<password>';
If the user already exists, add the password by using ALTER USER
:
ALTER USER <name> WITH PASSWORD '<password>';
Password management via PSQL comes with three security vulnerabilities:
- The password is visible on the screen.
- Viewing the command history exposes the password.
- The information transmits as clear text without any encryption.
Use this method with caution.
Grant Privileges to the User
By default, new users do not have any privileges except for login. To add privileges when creating a user, run the createuser
client utility in the following format:
createuser <option> <name>
To do the same in PSQL, run:
CREATE USER <name> WITH <option>;
Below is a table with commonly used options for both methods.
Option Syntax | PSQL | Explanation |
---|---|---|
-s --superuser |
SUPERUSER |
Add the superuser privilege. |
-S --no-superuser |
NOSUPERUSER |
No superuser privilege (default). |
-d --createdb |
CREATEDB |
Allows the user to create databases. |
-D --no-createdb |
NOCREATEDB |
Not allowed to create databases (default). |
-r --createrole |
CREATEROLE |
Allows the user to make new roles. |
-R --no-createrole |
NOCREATEROLE |
Not allowed to create roles (default). |
-i --inherit |
INHERIT |
Automatically inherit the privileges of roles (default). |
-I --no-inherit |
NOINHERIT |
Do not inherit privileges of roles. |
-l --login |
LOGIN |
Allows the user to log into a session with the role name (default). |
-L --no-login |
NOLOGIN |
Not allowed to log into a session with the role name. |
--replication |
REPLICATION |
Allows initiating streaming replication and activating/deactivating backup mode. |
--no-replication |
NOREPLICATION |
Not allowed to initiate streaming replication or backup mode (default). |
-P --pwprompt |
PASSWORD '<password>' |
Initiates password creation prompt or adds provided password to the user. Avoid using this option to create a passwordless user. |
/ | PASSWORD NULL |
Specifically sets the password to null. Every password authentication fails for this user. |
-c <number> --connection-limit=<number> |
CONNECTION LIMIT <number> |
Sets the maximum number of connections for user. Default is without limit. |
For example, create a user with create role and database privileges and add the -e
tag to echo the results:
sudo -u postgres createuser -d -r -e <name>
Or use the PSQL equivalent:
CREATE USER <name> WITH CREATEROLE CREATEDB;
In both cases, the stated privileges are granted automatically to the new user.
Create a PostgreSQL User Interactively
The interactive user creation is a practical option available only for the client utility. To create a user interactively, run the following command:
sudo -u postgres createuser --interactive
The command automatically prompts a question series, asking the following:
- Name of the role.
- Whether the role is a superuser.
- If the user is allowed to create databases.
- If the user is allowed to create other roles.
Answer yes (y
) to the superuser question automatically to add the «create database» and «create role» privileges and end the prompt.
List All Users in PostgreSQL
An essential tool for user management in databases is listing all the users with their respective roles and privileges.
To list all users in PostgreSQL, do the following:
1. Connect to the PSQL prompt as the postgres user:
sudo -u postgres psql
2. List all the users with the following command:
du
The output shows a table with the role names, attributes (privileges), and the user’s groups. To display the description for each role, add the plus (+
) sign:
du+
The output shows an additional column with the role description where applicable.
Conclusion
After going through the examples in this guide, you should know how user and role management works in PostgreSQL.
For further reading, learn about how Database-as-a-Service can help improve database management productivity.
I’m running PostgreSQL on mt Windows 7 machine. To run a database I type:
C:psql -Upostgres mydb
and this works, but it would be nice if I could leave off the -U
stuff, but then Postgres thinks I’m trying to log in as ‘Eric’, since that is my user profile.
So I need to add a user to Postgres, obviously. But how? If I try:
C:createuser Eric
Postgres thinks I’m trying to add a user Eric as the user Eric which fails. Adding the -U
flag doesn’t seem to work here.
What am I missing? My command window is in administrator mode, and there is no sudo
available, obviously.
asked Mar 4, 2011 at 2:31
Eric WilsonEric Wilson
56.6k77 gold badges199 silver badges270 bronze badges
1
In pgadmin you can create a new «Login Role» and name it Eric and give it permissions graphically, or from command line you can do something like this
psql -U postgres -c "CREATE ROLE Eric LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE;" mydb
see http://developer.postgresql.org/pgdocs/postgres/sql-createrole.html for information on the CREATE ROLE options.
answered Mar 4, 2011 at 2:39
digitaljoeldigitaljoel
26.1k15 gold badges87 silver badges115 bronze badges
2
Just to add more information. From official documentation: you can specify the user under which createuser utility logs in to postgres via environment variable:
PGUSER
One liner for powershell:
& { $env:PGUSER="postgres"; .createuser.exe Eric}
answered Apr 4, 2017 at 10:29
The documentation for createuser
indicates that a -U
switch is accepted:
-U username
--username username
User name to connect as (not the user name to create).
This is what I would expect to use (although I’ve never tried to set up PostgreSQL on Windows, only on unices).
answered Mar 4, 2011 at 2:39
Greg HewgillGreg Hewgill
927k180 gold badges1137 silver badges1275 bronze badges
This worked for me --username Shweta;
Now to create a database create database db;
barbsan
3,36811 gold badges21 silver badges28 bronze badges
answered Jun 3, 2019 at 13:11
valkyrie55valkyrie55
3273 silver badges10 bronze badges
The simplest case is to use the Windows command line and as I understand that the user posgres
is present:
psql -U postgres -c "CREATE ROLE shpp;"
psql -U postgres -c "ALTER ROLE shpp WITH LOGIN;"
psql -U postgres -c "ALTER USER shpp CREATEDB;"
psql -U postgres -c "ALTER USER shpp WITH PASSWORD 'shpp';"
In my shpp
example, this is the name and password of the new user.
James Risner
3,69811 gold badges20 silver badges39 bronze badges
answered Nov 5, 2022 at 11:50