PostgreSQL: pg_dump 失败,提示权限被拒绝

6

今天我尝试导出我的PgSQL数据库,这是我时常做的事情,但这次失败了:

borelupo@l5nets02:~$ pg_dump -f spam-20150123.sql -F p -O -C -h x.x.x.x -U borelupo spam
Password:
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  permission denied for relation badports
pg_dump: The command was: LOCK TABLE public.badports IN ACCESS SHARE MODE

现在,用户borelupo是该表的所有者,他怎么会完全遭到“权限被拒绝”的限制呢?
spam=> \d
         List of relations
Schema |     Name      | Type  |  Owner
-------+---------------+-------+----------
public | badports      | table | borelupo

发生了什么?PostgreSQL是9.1.14版本。

编辑:当我以管理员用户(postgres)连接时,转储工作正常。但我肯定不想需要登录到数据库服务器,切换用户等。


我看过那个,但它没有帮助:他们谈论拥有SELECT权限,但这里即使我是所有者,我也拥有所有权限(至少我认为是这样)。 - mdw
只需将“-U borelupo”更改为“-U postgres”。 - Vivek S.
使用 -U postgres 需要在本地机器上与数据库连接并以“postgres”身份登录。不过,我认为我已经找到了为什么会出现这个问题:显然,拥有者并不意味着自动具有所有权限! - mdw
请查看这个问题和我的回答,看起来是同样的问题:[https://dev59.com/n1kS5IYBdhLWcg3w5KAh]。 - Vinnix
3个回答

5

我认为我已经找到了问题所在:拥有该表的所有者并不意味着拥有所有权限。因此,我确实缺乏对给定表的权限。我的错。


3
你能详细说明一下你是如何发现缺乏权限的问题以及之后的修复过程吗? - caiski

2

对我来说问题是我的postgres角色不是SUPERUSER; 这可以通过ALTER ROLE postgres SUPERUSER;进行修复。


只有当 postgresSUPERUSER 组的成员时,此方法才有效。否则,任何人都可以将自己设置为 SUPERUSER - Chintan Pathak

1

pg_dump是一个管理员功能。因此,需要为用户授予适当的权限才能允许使用该功能。

尝试授予选择和更新访问权限。或者,您可以登录超级用户来执行操作。


6
pg_dump是一个管理员功能”-不,它不是。任何拥有对被复制表的选择权限的用户都可以运行pg_dump。普通用户应该能够在自己的架构上运行pg_dump - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接