3 回答

TA貢獻2080條經(jīng)驗 獲得超4個贊
繼續(xù)閱讀,最好的選擇。但我們首先澄清一些事情。
只有靜音密碼請求
如果您的問題只是密碼提示,您可以將其靜音。我在這里引用手冊:
-w
--no-password
永遠不要發(fā)出密碼提示。如果服務(wù)器需要密碼驗證,并且其他方式(例如
.pgpass
文件)無法使用密碼,則連接嘗試將失敗。此選項在沒有用戶輸入密碼的批處理作業(yè)和腳本中非常有用。(......)
您可能不需要密碼
通常這是不必要的。默認數(shù)據(jù)庫超級用戶postgres
通常對應(yīng)于同名的系統(tǒng)用戶。psql
如果使用身份驗證方法peer
或ident
在pg_hba.conf
文件中設(shè)置,則從此帳戶運行不需要密碼。你可能有這樣的一行:
local all postgres peer
通常還有:
local all all peer
這意味著,每個本地用戶都可以作為沒有密碼的同名數(shù)據(jù)庫用戶登錄到所有數(shù)據(jù)庫。
但是,這里存在一種常見的誤解。再次引用:
僅在本地連接上支持此方法。
大膽強調(diào)我的。
您正在連接localhost
,這不是“本地連接”,即使它中包含“本地”一詞。它是到127.0.0.1的TCP / IP連接。localhost上的維基百科:
在現(xiàn)代計算機系統(tǒng)上,
localhost
作為主機名127.0.0.0/8
,通常127.0.0.1
或::1
在IPv6中轉(zhuǎn)換為(環(huán)回)網(wǎng)絡(luò)塊中的IPv4地址。
本地連接的簡單解決方案
省略該參數(shù)-h
從psql
調(diào)用。再次引用手冊psql
:
如果省略主機名,psql將通過Unix域套接字連接 到本地主機上的服務(wù)器,或通過TCP / IP連接到
localhost
沒有Unix域套接字的機器上。
視窗
...沒有Unix域套接字,pg_hba.conf
開頭的行local
不適用于Windows。在Windows上localhost
,默認情況下連接通過,這將我們帶回到開始。
如果您的安全要求不嚴格,您可以通過localhost
以下方式信任所有連接:
host all all 127.0.0.1/32 trust
我只會關(guān)閉遠程連接進行調(diào)試。為了更安全,您可以在Windows上使用SSPI身份驗證。將此行添加到pg_hba.conf
“本地”連接:
host all all 127.0.0.1/32 sspi
如果你確實需要密碼
您可以設(shè)置環(huán)境變量,但不建議這樣做,尤其是對于Windows。手冊:
PGPASSWORD
行為與密碼連接參數(shù)相同。出于安全原因,不建議使用此環(huán)境變量,因為某些操作系統(tǒng)允許非root用戶通過ps查看進程環(huán)境變量; 而是考慮使用該~/.pgpass
文件(參見第32.15節(jié))。
手冊psql
:
甲conninfo
字符串是指定連接參數(shù)的替代:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
或者使用URI代替數(shù)據(jù)庫名稱:
$ psql postgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require
密碼文件
但通常最好設(shè)置一個.pgpass
文件,而不是將密碼放入腳本文件中。
請仔細閱讀本手冊中的簡短章節(jié)。特別要注意這里......
主機名
localhost
匹配來自本地計算機的TCP(主機名localhost
)和Unix域套接字(pghost
空或默認套接字目錄)連接。
確切的路徑取決于系統(tǒng)。此文件可以存儲多個角色和端口組合(數(shù)據(jù)庫集群)的密碼:
localhost:5432:*:myadmin:myadminPasswd localhost:5434:*:myadmin:myadminPasswd localhost:5437:*:myadmin:myadminPasswd...
在Windows機器上查找以下文件:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
通常解析為:C:\Documents and Settings\My_Windows_User_Name\Application Data\
。

TA貢獻1852條經(jīng)驗 獲得超7個贊
我有同樣的問題:
psql -hlocalhost -d<myDB> -U<myUser>
總是提示我輸入密碼。正如@Erwin解釋的那樣,因為它-hlocalhost
是通過TCP連接而不是通過Unix域套接字(基于Unix的操作系統(tǒng))。所以,即使您已將自己配置local
為受信任的:
local all all trust
它仍然會提示輸入密碼。因此,為了配置-hlocalhost
通過TCP工作,我必須配置host
for localhost地址,如下所示:
host all all 127.0.0.1/32 trust host all all ::1/128 trust
但這對我不起作用。我必須做的是將兩者結(jié)合起來:
host all all localhost trust
一些額外的讀數(shù):
添加回答
舉報