Postgresql
psql:fe_sendauth:未提供密碼
我有一個正在執行的 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
我什至嘗試在我的主目錄中配置 .pgpass 文件,但無濟於事:
*:*:*:postgres:postgres
我已經執行了以下命令:
sudo chmod 0600 .pgpass
然而,似乎沒有任何方法有效。有誰有想法嗎?我忘記做某事了嗎?
sudo
不保留大多數環境變數。如果要為在 下執行的命令指定環境變數,請執行以下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
允許這樣做將取決於您網站上有效的安全政策。我不推薦這種方法,因為它會在命令行歷史記錄和程序列表中公開密碼。使用文件要好得多
.pgpass
,或者最好設置pg_hba.conf
為對來自 userpeer
的連接進行身份驗證。local``postgres
您可以使用
.pgpass
文件,但它必須是.pgpass
您要訪問的使用者的文件,而不是您要訪問的sudo
使用者*;*它需要在這種情況下。想一想:running as不知道你是從你的帳戶執行它,它不知道你的使用者帳戶是什麼,即使它知道它也沒有作為使用者的讀取權限。sudo``~postgres/.pgpass``psql``postgres``sudo``postgres``~youruser/.pgpass
此外,
-w
與 相同--no-password
。兩者都指定是沒有意義的。