無法獲得運行 pg_dumpall 的授權

無法獲得運行 pg_dumpall 的授權

我想做的就是備份現有的資料庫集群,以便從 Postgresql 9.4.8 升級到 9.5。我使用的是 Ubuntu 16.04。

我知道這個帖子:Postgres 密碼驗證失敗。事實上,自從我上次遇到這個問題以來,它就已經被添加了書籤。我不聲稱有任何有意義的 postgres 知識。我並不總是明白什麼應該是 psql 命令,什麼應該是 bash 命令,而且博客和我沒有看到的內容並不總是讓我清楚。 PG 只是我的 Django 專案的後端。我當然不明白我怎麼又遇到這個問題了。

我的 Ubuntu 用戶是 malikarumi。我有兩個 postgres 用戶,maikarumi 和 postgres。 Postgres 是超級用戶。前段時間我也嘗試讓 malikarumi 成為超級用戶,但顯然失敗了,不,我不知道為什麼。

這是我今天的第一次嘗試:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup
pg_dumpall: query failed: ERROR:  permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit,rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2

接下來是:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

請注意,沒有任何內容,沒有幫助,沒有任何跡象表明出了什麼問題或該怎麼辦。

Password: 
Password: 
pg_dump: [archiver (db)] connection to database "esselldb" failed: FATAL:  password authentication failed for user "postgres"
pg_dumpall: pg_dump failed on database "esselldb", exiting

然後我用空白密碼和分號再次嘗試

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password: 
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied

請注意密碼適用於 psql

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
psql (9.4.8)
Type "help" for help.

但指令沒有,無論有沒有分號

postgres=# pg_dumpall > 9-4-backup
postgres-# pg_dumpall > 9-4-backup;
ERROR:  syntax error at or near "pg_dumpall"
LINE 1: pg_dumpall > 9-4-backup

這有效

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi: 

顯然,這是unix用戶,而不是資料庫用戶。但它始終是相同的密碼。

我改變了這個

# Database administrative login by Unix domain socket
local   all             postgres                                md5

按照上一篇文章中的建議進行對等(同樣 - 它怎麼能變回來?!)

但我無法重新啟動 postgres

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ pg_ctl stop
pg_ctl: command not found
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ cd ~
malikarumi@Tetuoan2:~$ pg_ctl stop
pg_ctl: command not found

psql 也不起作用

postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR:  syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
        ^
postgres=# 

但至少 psql 仍然讓我進去...

所以我重新啟動了整個機器並再次嘗試。你知道發生了什麼

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL:  Peer authentication failed for user "postgres"   

所以我確實成功地改變了它,但我仍然無法讓它工作。注意:它沒有詢問我的密碼!

然後我嘗試了這個

malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure

現在您已了解最新情況。順便說一句,我已經看過 postgres 官方文件很多次了,發現它們很晦澀難懂。如果您還知道像我這樣的非資料庫人員的良好基礎教程,那將會很有幫助。謝謝。

答案1

根據上下文,所有提到的故障都預計會發生,但以下情況除外:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

這裡報失敗,但還有下面的情況:

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql

您報告成功。

但這並不能說明問題。相同的密碼必須在您提到的精確上下文中同樣有效pg_dumpall,即:

  • 身份驗證模式設定為md5in pg_hba.conf(在文章其餘部分更改它之前)。
  • 透過此選項目標資料庫使用者是postgres -U postgres
  • 該命令被您自己的 unix 使用者呼叫 shell malikarumi

成功將身份驗證方案更改為peer(問題的最後一部分)後,出現問題的是您嘗試su而不是使用sudo,後者是 Ubuntu 上推薦的方法。

在 shell 提示字元下使用此命令:

malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup

它會要求輸入密碼,顯示類似以下內容:

[sudo] password for malikarumi:

請注意,它期望你的密碼,與您在名稱下開啟會話時使用的相同malikarumi,而不是 postgres 的密碼或資料庫密碼。

sudo -u postgres somepostgrescommandsudo someadmincommand如果您是該 Ubuntu 工作站的管理員,這只是您可以執行的操作的變體。

相關內容