Содержание

 При установке сервера postgresql создаётся единственный пользователь, который регистрируется в операционной системы и имеет обычный для Linux аккаунт - postgres. Пользователь обладает привилегиями суперпользователя для кластера postgresql и методом аутентификации из "коробки" trust - означает, что при подключение к серверу, для ввода команд пароль требоваться не будет.

//атрибуты пользователя postgres после развёртывания pgsql 
$ id postgres
uid=46(postgres) gid=46(postgres) группы=46(postgres)

 Многие сервисные приложения требуют при конфигурации своих служб устанавливать пароль к той базе данных для обслуживания которой необходим кластер pqsql. Сервер postgresql  в своих настройках предлагает несколько вариантов аутентификации, мы  остановимся на методе аутентификации md5, что бы этот метод работал необходимо внести изменения в файл /var/lib/pgsql/data/pg_hba.conf , но в начале создадим резервную копию файла pg_hba.conf

//создадим резервную копию файла
-bash-3.2$ cp -n /var/lib/pgsql/data/pg_hba.conf pg_hba.conf.orig
//возврат старой копии
-bash-3.2$ cp pg_hba.conf.orig /var/lib/pgsql/data/pg_hba.conf

смотрим запись файла /var/lib/pgsql/data/pg_hba.conf до редактирования:

-bash-3.2$ psql 
postgres=# SHOW hba_file;
hba_file
---------------------------------
/var/lib/pgsql/data/pg_hba.conf
(1 строка)

postgres=# SELECT line_number, type, database, user_name, address, auth_method FROM pg_hba_file_rules;

line_number | type | database | user_name| address | auth_method
-------------+-------+---------------+-----------+-----------+-------------
84 | local | {all} | {all} | | trust
86 | host | {all} | {all} | 127.0.0.1 | trust
88 | host | {all} | {all} | ::1 | trust
91 | local | {replication} | {all} | | trust
92 | host | {replication} | {all} | 127.0.0.1 | trust
93 | host | {replication} | {all} | ::1 | trust
(6 строк)
\q

 Предварительно, до всех действий с файлом  pg_hba.conf, установим пароль для суперпользователя postgres, если пароль не задан, вместо него хранится NULL, пройти  регистрацию по паролю этот пользователь не сможет.

Пароли пользователей БД  pgsql находяться в системном каталоге /var/lib/pgsql/data/pg_authid, управлять паролями можно либо используя SQL-команды CREATE ROLE и ALTER ROLE или командой password входяшей в сборник команд  утилиты pqsl

-bash-3.2$ psql 
postgres=# \password postgres
Введите новый пароль:
Повторите его:
postgres=# \q

вносим изменения в столбец database, заметим, что  базы данных replication нас сейчас не интересуют, все базы находятся на одном сервере, реплик нет

-bash-3.2$ echo 'local all all md5' > /var/lib/pgsql/data/pg_hba.conf
-bash-3.2$ echo 'host all all all md5' >> /var/lib/pgsql/data/pg_hba.conf

перегружаем сервер для перечитывания новых значений postgresql

-bash-3.2$ psql
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 строка)
\q

проверяем наши действия на ошибки

-bash-3.2$ psql
postgres=# SELECT line_number, error FROM pg_hba_file_rules WHERE error IS NOT NULL;
line_number | error
-------------+-------
(0 строк)
\q

смотрим какой метод аутентификации представлен после наших манипуляций

-bash-3.2$ psql
postgres=# SELECT line_number, type, database, user_name, address, auth_method FROM pg_hba_file_rules;

line_number | type | database | user_name | address | auth_method
-------------+-------+----------+-----------+---------+-------------
1 | local | {all} | {all} | | md5
2 | host | {all} | {all} | all | md5
(2 строки)
\q

смотрим алгоритм хеширования пароля выполнив SQL запрос параметра password_encryption

-bash-3.2$ psql
postgres=# SHOW password_encryption;
password_encryption
md5
(1 строка)
\q