为什么 .pgpass 文件不为 pg_dump、vacuumdb 或 reindexdb 命令提供密码?
Why is .pgpass file not supplying a password for the pg_dump, vacuumdb, or reindexdb commands?
我正在尝试在不同的 bash
脚本中执行多个不同的 PostgreSQL 命令。我以为我已经正确配置了 .pgpass
文件,但是当我尝试 运行 pg_dump
、vacuumdb
或 reindexdb
时,我收到关于如何设置密码的错误没有被提供。为了让我的 bash
脚本正确执行,我需要这些命令来 return 退出代码 0.
我在 macOS 10.12.6 (16G1408) 上 运行ning PostgreSQL 9.5.4。
在管理员用户帐户中 [既不是 root
也不是 postgres
],我在 ~
中有一个 .pgpass
文件。 .pgpass
文件包含:
localhost:5432:*:postgres:DaVinci
用户确实是postgres
,密码确实是DaVinci
。
.pgpass
文件的权限为 600
。
在 pg_hba.conf
文件中,我有:
# pg_hba.conf file has been edited by DaVinci Project Server. Hence, it is recommended to not edit this file manually.
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
因此,例如,从用户帐户 [既不是 root
也不是 postgres
],我 运行:
/Library/PostgreSQL/9.5/pgAdmin3.app/Contents/SharedSupport/pg_dump --host localhost --username postgres testworkflow13 --blobs --file /Users/username/Desktop/testdestination1/testworkflow13_$(date "+%Y_%m_%d_%H_%M").backup --format=custom --verbose --no-password
我收到以下错误:
pg_dump: [archiver (db)] connection to database "testworkflow13" failed: fe_sendauth: no password supplied
如果我 运行 和 sudo
也得到相同的结果。
奇怪的是,pg_dump
执行, 导出一个 .backup
文件到 testdestination1
目录,但由于它抛出错误,如果它在 bash
脚本中,脚本将停止。
我哪里错了?如何确保 .pgpass
文件被正确读取,以便命令中的 --no-password
标志起作用?
事实证明,将 pg_hba.conf
文件中的所有三行更改为 trust
身份验证方法解决了这个问题。
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
由于方法是 trust
,因此 .pgpass
文件可能完全不相关——我不确定,但至少我可以使用它。
请先阅读 official docs。
此外,即使这个主题也超过 2 年,我强烈建议至少更新到版本 10,无论如何相关的内容都没有改变 .pgpass
.pgpass 需要是 chmod 600,好的,使用它的用户必须可以读取,所以它必须是该文件的所有者。
请删除 --no-password 只会混淆并且不需要。
使用 127.0.0.1 而不是 localhost 说明你要去哪里,“通常”是一样的。
... from a user account [neither root nor postgres] ...
如上所述,您使用的用户必须具有对 .pgpass 的读取权限,因此您必须澄清这一点并将该文件提供给该用户,也许使用 PGPASSFILE env 变量可能对您有用。
另一种方法是使用带或不带 .pgpass 的 .pg_service.conf 文件,对于您所写的内容,它看起来可能更合适
您也可以在用户的环境中设置 PGPASSWORD。
考虑安全性,有些选择看起来最简单但可能会暴露访问权限。作为 DBA,我坦率地说,我厌倦了将密码存储在可见位置、打印在日志或 github 上或设置“在 pg_hba 中信任”,最后来找我说“postgreSQL 不安全”..哈哈哈!
最后请注意,您没有 pg_hba 错误,以防您收到“pg_hba”错误消息。
我正在尝试在不同的 bash
脚本中执行多个不同的 PostgreSQL 命令。我以为我已经正确配置了 .pgpass
文件,但是当我尝试 运行 pg_dump
、vacuumdb
或 reindexdb
时,我收到关于如何设置密码的错误没有被提供。为了让我的 bash
脚本正确执行,我需要这些命令来 return 退出代码 0.
我在 macOS 10.12.6 (16G1408) 上 运行ning PostgreSQL 9.5.4。
在管理员用户帐户中 [既不是 root
也不是 postgres
],我在 ~
中有一个 .pgpass
文件。 .pgpass
文件包含:
localhost:5432:*:postgres:DaVinci
用户确实是postgres
,密码确实是DaVinci
。
.pgpass
文件的权限为 600
。
在 pg_hba.conf
文件中,我有:
# pg_hba.conf file has been edited by DaVinci Project Server. Hence, it is recommended to not edit this file manually.
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
因此,例如,从用户帐户 [既不是 root
也不是 postgres
],我 运行:
/Library/PostgreSQL/9.5/pgAdmin3.app/Contents/SharedSupport/pg_dump --host localhost --username postgres testworkflow13 --blobs --file /Users/username/Desktop/testdestination1/testworkflow13_$(date "+%Y_%m_%d_%H_%M").backup --format=custom --verbose --no-password
我收到以下错误:
pg_dump: [archiver (db)] connection to database "testworkflow13" failed: fe_sendauth: no password supplied
如果我 运行 和 sudo
也得到相同的结果。
奇怪的是,pg_dump
执行, 导出一个 .backup
文件到 testdestination1
目录,但由于它抛出错误,如果它在 bash
脚本中,脚本将停止。
我哪里错了?如何确保 .pgpass
文件被正确读取,以便命令中的 --no-password
标志起作用?
事实证明,将 pg_hba.conf
文件中的所有三行更改为 trust
身份验证方法解决了这个问题。
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
由于方法是 trust
,因此 .pgpass
文件可能完全不相关——我不确定,但至少我可以使用它。
请先阅读 official docs。
此外,即使这个主题也超过 2 年,我强烈建议至少更新到版本 10,无论如何相关的内容都没有改变 .pgpass
.pgpass 需要是 chmod 600,好的,使用它的用户必须可以读取,所以它必须是该文件的所有者。
请删除 --no-password 只会混淆并且不需要。
使用 127.0.0.1 而不是 localhost 说明你要去哪里,“通常”是一样的。
... from a user account [neither root nor postgres] ...
如上所述,您使用的用户必须具有对 .pgpass 的读取权限,因此您必须澄清这一点并将该文件提供给该用户,也许使用 PGPASSFILE env 变量可能对您有用。
另一种方法是使用带或不带 .pgpass 的 .pg_service.conf 文件,对于您所写的内容,它看起来可能更合适
您也可以在用户的环境中设置 PGPASSWORD。
考虑安全性,有些选择看起来最简单但可能会暴露访问权限。作为 DBA,我坦率地说,我厌倦了将密码存储在可见位置、打印在日志或 github 上或设置“在 pg_hba 中信任”,最后来找我说“postgreSQL 不安全”..哈哈哈!
最后请注意,您没有 pg_hba 错误,以防您收到“pg_hba”错误消息。