通過 pgAdmin 使用 peer auth 連接到本地 PostgreSQL 伺服器
語境
我有一個在遠端機器上執行的PostgreSQL伺服器,但我通過 VPN 在本地連接。
它的
pg_hba.conf
文件正在接受本地連接的對等身份驗證;
local all postgres peer
我不喜歡改變這一點。
如果我按照這裡寫的:https ://documentation.help/pgAdmin3/connect.html ;
主機是要聯繫的機器的 IP 地址,或完全限定的域名。在基於 Unix 的系統上,地址欄位可以留空以使用本地機器上的預設 PostgreSQL Unix 域套接字,或者設置為包含 PostgreSQL 套接字的備用路徑。如果輸入路徑,則必須以“/”開頭。也可以指定埠號。
我在pgAdmin3上收到此錯誤:
我什至嘗試不將該
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
欄位留空:在那之前,我以普通 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 名稱地址中包含 Postgres
unix_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”重複。