Postgresql

通過 pgAdmin 使用 peer auth 連接到本地 PostgreSQL 伺服器

  • April 16, 2020

語境

我有一個在遠端機器上執行的PostgreSQL伺服器,但我通過 VPN 在本地連接。

它的pg_hba.conf文件正在接受本地連接的對等身份驗證;

local all postgres peer

我不喜歡改變這一點。

如果我按照這裡寫的:https ://documentation.help/pgAdmin3/connect.html ;

主機是要聯繫的機器的 IP 地址,或完全限定的域名。在基於 Unix 的系統上,地址欄位可以留空以使用本地機器上的預設 PostgreSQL Unix 域套接字,或者設置為包含 PostgreSQL 套接字的備用路徑。如果輸入路徑,則必須以“/”開頭。也可以指定埠號。

我在pgAdmin3上收到此錯誤:

pgAdminIII 錯誤

我什至嘗試不將該Host欄位留空,而是在其中寫入套接字文件的名稱:/var/run/postgresql-> 行為是相同的。

如果我插入postgresql://,我會得到;

An error has occurred:

07:55:28: Error: Error connecting to the server: could not translate host name
"postgresql://" to address: Name or service not known

並且 pgAdmin4 不允許我將該Host欄位留空:

pgAdmin4 錯誤

在那之前,我以普通 Ubuntu 使用者身份登錄。

所以我決定在成為 Ubuntu 使用者時嘗試一下postgres,就像我想使用 peer auth 執行 pg_* 命令時一樣(例如$ sudo -u postgres pg_* -U postgres bla bla):

pgAdmin3:

$ sudo -u postgres pgAdmin3
Client is not authorized to connect to Server07:44:11: Erorr: 
Unable to initialize GTK+, is DISPLAY set properly?

pgAdmin4:

$ sudo -u postgres pgAdmin4
QStandardPaths: XDG_RUNTINE_DIR not set, defaulting to '/tmp/runtime-postgres'
Client is not authorized to connect to Serverqt.qpa.screen: QXcbConnection: 
Could not connect to display :1.0
Could not connect to any X display.

接下來我決定在我的本地機器上檢查一下,以繞過這些與顯示相關的錯誤

pgAdmin3:

$ sudo -u postgres pgadmin3
No protocol specified
07:49:51: Error: Unable to initialize GTK+, is DISPLAY set properly?

我的本地機器上沒有 pgAdmin4,但我想我會遇到一些相同的錯誤。

問題

如何使用 pgAdmin3 或 pgAdmin4 登錄到基於對等身份驗證的本地 PostgreSQL 伺服器?

更新:

/var/log/postgres/postgresql-12-main.log在使用 pgAdmin3 連接不成功後,這三個新行被添加到日誌文件中:

2020-04-16 16:34:55.548 CEST [17842] postgres@postgres LOG:  provided user name (postgres) and authenticated user name (ubuntumainusername) do not match
2020-04-16 16:34:55.548 CEST [17842] postgres@postgres FATAL:  Peer authentication failed for user "postgres"
2020-04-16 16:34:55.548 CEST [17842] postgres@postgres DETAIL:  Connection matched pg_hba.conf line 85: "local   all             postgres                                peer"

確保您有用於啟動 PGAdmin3 或 PGAdmin4 的作業系統使用者在數據庫中。要在數據庫中創建 OS 使用者,可以使用以下命令:

sudo -u postgres psql -c "CREATE USER $(id -nu;" postgres

在 HOST 名稱地址中包含 Postgresunix_socket_directories 您可以使用以下命令獲取unix_socket_directories設置

sudo -u postgres psql -c "SHOW unix_socket_directories;"

您可以使用 pg_ident.conf 文件定義一個使用者映射,該映射將允許作業系統使用者“ubuntumainusername”以 PostgreSQL 使用者“postgres”的身份連接。但是,這將需要您更改 pg_hba.conf 以啟動使用者映射。

您嘗試將作業系統使用者更改為 postgres 並從該作業系統帳戶執行程序將是另一種選擇。您顯示的失敗可能不是由於 PostgreSQL,而是由於您的遠端桌面在 sudo 下無法正常工作。修復這不是真正的 DBA 問題,您可以嘗試“超級使用者”論壇。如果您嘗試通過 sudo 啟動其他一些 GUI(例如 firefox),它會起作用嗎?

我首先只是su - postgres以“postgres”作業系統使用者的身份獲得一個完整的外殼,而不是嘗試使用sudo -u ...快捷方式。無論您對作業系統使用者“ubuntumainusername”所做的任何環境設置以使 xterm 工作,都可能必須對作業系統使用者“postgres”重複。

引用自:https://dba.stackexchange.com/questions/265130