Изменение настроек

Сохраним исходный файл настроек.

postgres$ cp -n /usr/local/pgsql/data/pg_hba.conf pg_hba.conf.orig

Теперь перезапишем pg_hba.conf с нуля:

postgres$ echo 'local  all  postgres       trust'  > /usr/local/pgsql/data/pg_hba.conf
postgres$ echo 'host   all  all       all  md5'   >> /usr/local/pgsql/data/pg_hba.conf
=> 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}    | {postgres} |         | trust
           2 | host  | {all}    | {all}      | all     | md5
(2 rows)

=> SELECT pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)

Создание ролей

=> SHOW password_encryption;
 password_encryption 
---------------------
 md5
(1 row)

=> CREATE ROLE alice LOGIN PASSWORD 'alice';
CREATE ROLE
=> SET password_encryption='scram-sha-256';
SET
=> CREATE ROLE bob LOGIN PASSWORD 'bob';
CREATE ROLE

Проверка подключения

Поскольку настройки требуют ввода пароля, мы укажем его явно в строке подключения.

При выполнении этого задания лучше ввести пароль вручную, чтобы убедиться в том, что он запрашивается.

=> \c "dbname=postgres user=alice host=localhost password=alice"
You are now connected to database "postgres" as user "alice" on host "localhost" at port "5432".
=> \c "dbname=postgres user=bob host=localhost password=bob"
You are now connected to database "postgres" as user "bob".

Просмотр паролей

=> \q
postgres$ psql 
=> SELECT rolname, rolpassword FROM pg_authid WHERE rolname IN ('alice','bob') \gx
-[ RECORD 1 ]--------------------------------------------------------------------------------------------------------------------------------------
rolname     | alice
rolpassword | md5579e43b423b454623383471aeb85cd87
-[ RECORD 2 ]--------------------------------------------------------------------------------------------------------------------------------------
rolname     | bob
rolpassword | SCRAM-SHA-256$4096:CpoKlUC516fdURCPKAbjeQ==$9Lf9PWQ8RMK/DhdSj1iZLaJ4kfV8UgP1inCp/Dl2MZs=:c5OHlB9nwlsfB+NhZE32BOpdQ6DPSo0dcz/CF8Zw3E8=

Пароли хранятся как значение хеш-функции, не допускающее расшифровки. Сервер всегда сравнивает между собой зашифрованные значения - введенный пароль и значение из pg_authid.

Восстанавливаем настройки

postgres$ cp pg_hba.conf.orig /usr/local/pgsql/data/pg_hba.conf
=> SELECT pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)