Аутентификация с помощью pgpass не работает

Я пытаюсь настроить автоматическое резервное копирование для postgres db на локальном автономном сервере в Debian. У меня есть сценарий:

#!/bin/bash
export PGPASSFILE='/home/mtn/.pgpass'
pg_dumpall -U db_user --verbose 2>/var/log/postgresql/pgdump.log | gzip > /mnt/bulk-data/db_backup/db_bak.gz

Есть файл .pgpass :

-rw-------  1 mtn  mtn     47 Nov 13 10:14 .pgpass

с:

*:*:*:postgres:guest
*:*:*:db_user:guest

И задание sudo crontab -e :

20 0 * * * /home/mtn/backup.sh >/dev/null 2>&1

pg_hba :

local   all             postgres                                peer

Когда я пытаюсь запустить его, я получаю:

pg_dumpall: error: could not connect to database "template1": FATAL:  Peer authentication failed for user "db_user"

Где ошибка?

PS Все работает, если я изменяю скрипт на запуск от имени пользователя root sudo -u postgres pg_dumpall .

ОБНОВЛЕНИЕ : В итоге у меня сработало добавление этой строки в pg_ident.conf :

omicron           root                    postgres

Затем в pg_hba.conf перед всем остальным:

local   all      all                 ident map=omicron

И изменение скрипта для запуска pg_dumpall как пользователь postgres (только потому, что db_user не имел всех необходимых привилегий для dumpall ).

0
задан 16 November 2020 в 16:10
1 ответ

peer аутентификация означает, что postgresql принимает соединения через сокет unix от указанного пользователя системы unix без пароля в качестве указанного пользователя базы данных, поэтому пытаться использовать PGPASS бессмысленно. Подробнее о равноправном доступе здесь: https://www.postgresql.org/docs/current/auth-peer.html В вашем случае ваш pg_hba.conf позволяет только системному пользователю postgres подключаться ко всем базам данных в качестве пользователя базы данных postgres. Я не вижу вашего db_user в вашем pg_hba.conf, поэтому он не может подключиться.sudo -u postgres pg_dumpall означает, что вы переключаетесь на системного пользователя postgres и запускаете pg_dumpall от имени этого пользователя, подключающегося как пользователь базы данных postgres. Вот почему это работает.

1
ответ дан 14 November 2020 в 20:31

Теги

Похожие вопросы