无法获取运行 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在你提到的确切上下文中也一定同样有效,即:

  • 身份验证模式设置为md5pg_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 somepostgrescommand只是sudo someadmincommand如果您是此 Ubuntu 工作站的管理员则可以执行的操作的一种变体。

相关内容