2012-05-03 19 views
72

我試過使用主機變量PGPASSWORD.pgpass這兩個都不會允許我對數據庫進行身份驗證。我已經chmod倒是.pgpass適當的權限,也試過:我怎樣才能得到pg_dump進行身份驗證

export PGPASSWORD=mypass and PGPASSWORD=mypass 

密碼確實含有\但是我在單引號包圍PGPASS='mypass\'它,它仍然不會進行身份驗證。

我運行:

pg_dump dbname -U username -Fc 

,我仍然收到

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username" 
+1

「...對等認證...」部分錯誤信息表示它沒有使用[密碼認證](http://www.postgresql.org/docs/current/static/auth- methods.html#AUTH-PEER)。 –

回答

149

快速解決方案

的問題是,它試圖根據需要進行本地peer驗證您的當前用戶名。如果您想使用密碼,則必須使用-h指定主機名。

pg_dump dbname -U username -h localhost -F c 

說明

這是由於您的pg_hba.conf

local all    all          peer 
host all    all    127.0.0.1/32   md5 

這告訴Postgres一起使用本地用戶peer認證以下要求Postgres的用戶名,以當前系統匹配用戶名。第二行是指使用主機名的連接,並允許您通過md5方法使用密碼進行身份驗證。

我的首選開發配置

注意:這應該僅在單用戶的工作站上使用。這可能會導致生產或多用戶計算機上的主要安全漏洞。

當針對本地postgres實例進行開發時,我喜歡將我的本地身份驗證方法更改爲trust。這將允許通過本地unix套接字連接到任何沒有密碼的用戶。只需將peer更改爲trust並重新加載postgres即可完成。

# Don't require a password for local connections 
local all    all          trust 
+2

它幫助。謝謝 – StarWars

+3

對於任何不確定你的conf文件在哪裏的地方:使用'sudo locate pg_hba.conf' - 它必須是sudo,因爲postgres用戶將是唯一可以訪問目錄(我認爲)的用戶。 – jcollum