用户"db_user"的对等身份验证失败



我正在Debian上的本地无头服务器上为postgres db设置自动备份。我有一个脚本:

#!/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如果我将脚本更改为以根sudo -u postgres pg_dumpall的身份运行,一切都会正常工作。

更新:最终对我起作用的是将这一行添加到pg_ident.conf:

omicron           root                    postgres

然后先到pg_hba.conf,然后再到其他:

local   all      all                 ident map=omicron

并将脚本更改为以用户postgres的身份运行pg_dumpall(只是因为db_userdumpall没有所有必要的特权(。

在没有通过pg_ident.conf的用户映射的情况下,只有一个名为"db_user";被允许作为数据库用户"登录;db_user";。这就是对等身份验证的含义。您的.pgpass并不重要,因为对等身份验证不使用密码。

你展示的pg_hba中的一行也无关紧要,因为"postgres"!="db_user";所以那条线不匹配。但很明显,您还有其他行没有显示给我们。如果您查看服务器的日志文件,您应该会发现有关错误的更多详细信息,以及使用了pg_hba的哪一行。

有很多解决方案。您可以更改您的linux用户名以匹配postgres用户名,或者更改postgres名称以匹配linux用户名,或者使用pg_ident.conf在它们之间进行映射,或者更改您的pg_hba(正确的行!(以使用md5而不是peer。

最新更新