- Creating user, database and adding access on PostgreSQL
- Creating user
- Creating Database
- Giving the user a password
- Granting privileges on database
- Doing purely via psql
- Postgresql create admin user
- Synopsis
- Description
- Options
- Environment
- Diagnostics
- Examples
- See Also
- Submit correction
- Как работать с пользователями в PostgreSQL
- Создание нового пользователя
- 1. Создание пользователя
- 2. Назначение прав на использование базы данных
- 3. Настройка файла pg_hba.conf
- 4. Проверка
- Настройка прав доступа к базе с помощью групп
- Редактирование пользователя
- 1. Смена пароля
- Удаление пользователей и групп
- Назначение особых прав пользователям PostgreSQL
- Учетная запись для резервного копирования
- Графический интерфейс
- Postgresql create admin user
- Синтаксис
- Описание
- Параметры
- Переменные окружения
- Диагностика
- Примеры
Creating user, database and adding access on PostgreSQL
NOTE : Right off the bat — this is valid as on March 2017, running on Ubuntu 16.04.2, with PostgreSQL 9.6
One nice thing about PGSQL is it comes with some utility binaries like createuser and createdb. So we will be making use of that.
As the default configuration of Postgres is, a user called postgres is made on and the user postgres has full superadmin access to entire PostgreSQL instance running on your OS.
The above command gets you the psql command line interface in full admin mode.
In the following commands, keep in mind the are to denote variables you have to set yourself. In the actual command, omit the <>
Creating user
Creating Database
Giving the user a password
Granting privileges on database
And yeah, that should be pretty much it !
Doing purely via psql
Your OS might not have the createuser or createdb binaries, or you may, for some reason want to do it purely via psql, then these are the three magic commands —
Obligatory shameless self-plug :
I am one of the co-founders of Coding Blocks — A Software Programming bootcamp, based out of New Delhi, India. Among other things, we teach Full Stack Web Development using NodeJS, via both classroom programmes, as well as online classes. You can follow our Medium to find more articles on Android and Web development.
Postgresql create admin user
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:
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.
The new user will be allowed to create databases.
The new user will not be allowed to create databases. This is the default.
Echo the commands that createuser generates and sends to the server.
This option is obsolete but still accepted for backward compatibility.
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.
The new role will automatically inherit privileges of roles it is a member of. This is the default.
The new role will not automatically inherit privileges of roles it is a member of.
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.)
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.
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.)
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.
The new user will be allowed to create new roles (that is, this user will have CREATEROLE privilege).
The new user will not be allowed to create new roles. This is the default.
The new user will be a superuser.
The new user will not be a superuser. This is the default.
Print the createuser version and exit.
The new user will have the REPLICATION privilege, which is described more fully in the documentation for CREATE ROLE .
The new user will not have the REPLICATION privilege, which is described more fully in the documentation for CREATE ROLE .
Show help about createuser command line arguments, and exit.
createuser also accepts the following command-line arguments for connection parameters:
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.
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).
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.
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
Default connection parameters
Specifies whether to use color in diagnostic messages. Possible values are always , auto and never .
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:
To create a user joe on the default database server with prompting for some additional attributes:
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:
To create the user joe as a superuser, and assign a password immediately:
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.
See Also
Submit correction
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.
Copyright © 1996-2022 The PostgreSQL Global Development Group
Как работать с пользователями в PostgreSQL
Часть нижеописанных операций нужно выполнять в командной оболочке PostgreSQL. Она может быть запущена от пользователя 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;
Теперь подключаемся к базе, к которой хотим дать доступ:
* в примере подсоединимся к базе с названием 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-оболочки:
3. Настройка файла pg_hba.conf
Для возможности подключиться к СУБД от созданного пользователя, необходимо проверить настройки прав в конфигурационном файле pg_hba.conf.
Для начала смотрим путь расположения данных для PostgreSQL:
В ответ мы получим, что-то на подобие:
* в данном примере /var/lib/pgsql/9.6/data/ — путь расположения конфигурационных файлов.
Добавляем права на подключение нашему созданному пользователю:
.
# 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;
Подключимся к базе данных, для которой хотим настроить права
и предоставим все права для группы myRole всем таблицам базы database1
database1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO GROUP «myRole»;
Редактирование пользователя
1. Смена пароля
Рассмотрим несколько примеров смены пароля пользователя.
=# ALTER USER postgres PASSWORD ‘password’
* в данном примере мы зададим пароль 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):
Даем права на все последовательности в схеме:
=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO bkpuser;
* мы дали права для схемы public. Это схема является схемой по умолчанию, но в вашем случае она может быть другой. В таком случае, подставляем свое значение.
Графический интерфейс
Иногда проще воспользоваться программой для выставления прав и работы с PostgreSQL. Могу посоветовать приложение pgAdmin. Оно позволит в оконном режиме не только создать и удалить пользователей, но и полноценно работать с СУБД.
Postgresql create admin user
createuser — создать новую учётную запись PostgreSQL
Синтаксис
createuser [ параметр-подключения . ] [ параметр . ] [ имя_пользователя ]
Описание
createuser создаёт нового пользователя PostgreSQL , а если точнее — роль. Лишь суперпользователь и пользователи с привилегией CREATEROLE могут создавать новые роли, таким образом, createuser должна запускаться от их лица.
Чтобы создать дополнительного суперпользователя, необходимо подключиться от имени существующего, одного лишь права 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 также принимает из командной строки параметры подключения:
Указывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета. -p порт
—port= порт
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения. -U имя_пользователя
—username= имя_пользователя
Имя пользователя для подключения (не имя создаваемого пользователя). -w
—no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл .pgpass , попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль. -W
—password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как createuser запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако чтобы понять это, createuser лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести -W , чтобы исключить эту ненужную попытку подключения.
Переменные окружения
Параметры подключения по умолчанию PG_COLOR
Выбирает вариант использования цвета в диагностических сообщениях. Возможные значения: always (всегда), auto (автоматически) и never (никогда).
Эта утилита, как и большинство других утилит PostgreSQL , также использует переменные среды, поддерживаемые libpq (см. Раздел 34.15).
Диагностика
В случае возникновения трудностей, обратитесь к CREATE ROLE и psql . Переменные окружения и параметры подключения по умолчанию libpq будут применены при запуске утилиты, это следует учитывать при диагностике.
Примеры
Чтобы создать роль joe на сервере, используемом по умолчанию:
Чтобы создать роль joe на сервере, используемом по умолчанию, с запросом дополнительных параметров:
Чтобы создать того же пользователя joe с явно заданными атрибутами, подключившись к компьютеру eden , порту 5000:
Чтобы создать роль joe с правами суперпользователя и предустановленным паролем:
В приведённом примере введённый пароль отображается лишь для отражения сути, на деле же он не выводится на экран. Как можно видеть, он шифруется прежде чем передаётся в команде клиенту.