我有一个正在运行的PostgreSQL数据库。 现在我想在我的数据库上自动执行一些操作,但是我的密码有问题。
我正在使用下面的bash脚本:
#!/bin/bash export PGPASSWORD="postgres" sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
当我运行bash脚本时,出现以下错误:
psql: fe_sendauth: no password supplied
我甚至试图在我的主目录中configuration.pgpass文件,但无济于事:
*:*:*:postgres:postgres
我已经运行了下面的命令:
sudo chmod 0600 .pgpass
尽pipe如此,似乎没有任何方法的作品。 有没有人有任何想法? 我忘了做点什么吗?
sudo不保留大多数环境variables。 如果你想要在sudo下运行的命令指定环境variables,可以使用sudo sudo :
sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
sudo是否允许这将取决于您的网站上实施的安全策略。
我不推荐这种方法,因为它在命令行历史logging和进程列表中暴露了密码。 使用.pgpass文件会更好,或者最好将pg_hba.conf设置为用于来自用户postgres的local连接的peer身份validation。
您可以使用.pgpass文件,但它必须是您要sudo的用户的.pgpass文件,而不是您正在使用的用户的.pgpass文件。 在这种情况下,它需要~postgres/.pgpass 。 想想看: psql以postgres身份运行并不知道你是通过sudo从你的帐户运行的,它不知道你的用户帐号是什么,即使它没有作为用户postgres读取权限~youruser/.pgpass 。
另外, -w和--no-password是一样的。 指定两者都没有意义。