.pgpass 与 postgreSQL 不工作

.pgpass 与 postgreSQL 不工作

我已将 .pgpass 文件放在 /folder/.pgpass 中,它看起来像这样

*:*:*:postgres:password_for_postgres

我有一个 bash 脚本,用于从 postgreSQL 备份数据库:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

但是,脚本仍然提示我输入密码。据我所知,PGPASSFILE 的值是正确的。有什么提示可以说明问题出在哪里吗?

/K

答案1

pgpass 文件是否设置为模式 0600(即,仅所有者可读/写)?如果它是群组或世界可读的,客户端库将忽略它。

答案2

在我的配置(Ubuntu 10.04.3PostgreSQL 8.4)中,当我登录的用户名与我尝试从文件中获取密码的用户名相同时,我终于可以让它工作了.pgpass

以 身份登录后deployer,我尝试使用.pgpass文件访问用户名 所拥有的数据库appname,该用户名没有 Unix 用户等效项。我无法完成这项.pgpass工作,直到我开始deployer以用户身份访问我的数据库...

这是我的/home/deployer/.pgpass文件内容:

*:*:*:deployer:password

以下是其中的一部分/etc/postgresql/8.4/main/pg_hba.conf

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

如您所见,我的所有连接都需要密码(md5)。

使用此配置,假设我有一个使用此命令创建的数据库:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

我无需输入密码即可执行以下操作:

deployer@ubuntu-server:~$ dropdb dbname

一旦我将我的名字更改.pgpass.pgpass-no,就需要输入密码。

顺便说一句,不要忘记您的.pgpass文件必须具有0600权限:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass

答案3

  1. 创建内容为 .pgpass 的文件

主机:5432:somedb:someuser:somepass

  1. 使用命令设置权限

sudo chmod 600 .pgpass

  1. 将文件所有者设置为您登录时使用的同一用户:

sudo chown 登录用户名:登录用户名.pgpass

  1. 设置 PGPASSFILE 环境变量:

导出 PGPASSFILE='/home/user/.pgpass'

现在通过连接数据库进行检查:

psql -h 主机-U 某些用户某些数据库

我不会提示输入密码并登录到postgresql。

答案4

另一件需要检查的事情是,您没有使用带有-W的标志psql,因为这将始终强制手动输入密码,而不是检查您的.pgpass

相关内容