Postgres对于表<tablename>的权限被拒绝。

5

我想学习Postgres,已经创建了两个基本表格,但无法将它们连接在一起。

以下是我的关系列表:

 Schema |     Name     |   Type   |  Owner
--------+--------------+----------+----------
 public | login        | table    | postgres
 public | login_id_seq | sequence | postgres
 public | users        | table    | test
(3 rows)

当我使用命令时,

SELECT * FROM users JOIN login ON users.name = login.name;

我遇到了一个问题:

错误:关于 login 表没有权限。

我不知道该怎么办或者我做错了什么。

3个回答

4
你应该授予用户test SELECT权限:
GRANT SELECT ON login TO test;

如果允许测试修改登录,您还应授予其他权限:

test 可能会修改 login,因此您需要授权其他权限:

GRANT SELECT, INSERT, UPDATE, DELETE ON login TO test;

您应该以数据库所有者或用户postgres身份执行这些语句。通常情况下,您可以使用

psql -Upostgres -dtest

如果您在Postgres服务器所在的同一台机器上运行此命令。

您还可以将login的所有权更改为test

ALTER TABLE login OWNER TO test;
ALTER SEQUENCE login_id_seq OWNER TO test;

但是必须以用户postgres的身份执行此操作。

编辑:您可以尝试使用以下命令更改用户:

SET ROLE 'postgres';

@lat long所建议。


我得到了相同的错误 permission denied for relation login - Joe Escobedo
GRANT语句的结果是什么?你连接的用户是谁? - clemens
你必须从终端运行此命令,或者在psql中使用\c postgres将用户从_test_更改为_postgres_。 - clemens
老实说,当 pgAdmin 运行时,我以为数据库已经连接了。我在做教程,最后一步当然不能通过。有没有办法切换表格?让我困惑的一件事是,在关系中,它说 postgres 有一个所有者,但 postgres 在该数据库中没有任何内容。它只是一个默认的,我用它打开了数据库,然后改成了测试,我所有的表格都在那里。 - Joe Escobedo
我不使用pgAdmin,但我相信你可以在其中更改用户和其他连接参数。请参考其文档。但是,您必须已经作为postgres登录才能创建登录表。你是如何做到的? - clemens
显示剩余5条评论

2

所以这就是我最终让它工作的方法...我基本上只是进入了pgAdmin4的登录属性,找到了所有者并将其切换为test,然后运行了以下命令:

SELECT * FROM users JOIN login ON users.name = login.name;

最终得到了我想要的结果。出乎意料的简单解决。


0

"test"用户没有登录和使用相关表的权限。请使用"postgres"用户运行查询:

SET ROLE 'postgres';

然后运行您的查询。

虽然使用该命令更改角色有助于修改表,但将_postgres_用作普通数据库用户并不是一个好主意。Postgres具有在UNIX上像root用户一样执行所有操作的权限。作为postgres用户,您可以轻松而无意地破坏任何模式元素。 - clemens
1
当然,这不是最佳实践。理想情况下,“test”用户应该被赋予有关表的权限。 - lat long

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