postgresql 为什么我在pgAdmin 4上收到schema public的权限拒绝错误?

zbwhf8kr  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(3)|浏览(1110)

我试图在pgAdmin 4中查看AACT数据库中的原始数据。我在Mac电脑上。当我试图查看'complete_oncology'表中的前100行时,我得到以下错误:

ERROR: permission denied for schema public
LINE 1: SELECT * FROM public.complete_oncology
                      ^
SQL state: 42501
Character: 15

我是否没有足够的权限?如果是,我如何授予自己查看此表的权限?我可以查看AACT数据库中不同架构的其他表。我看到一些用户建议授予自己以下权限,但没有运气:

GRANT SELECT ON complete_oncology TO PUBLIC

这只会出现一个错误:

ERROR:  relation "complete_oncology" does not exist
SQL state: 42P01
ioekq8ef

ioekq8ef1#

如果你得到public.complete_oncology的“permission denied”,但是oncology的“relationship does not exist”,这只能意味着一件事:你没有public架构上的USAGE权限。
获取要运行的架构的所有者

GRANT USAGE ON SCHEMA public TO your_user;

然后你就可以看到这个表了。如果你仍然没有对表本身的权限,让所有者也授予你对表的SELECT权限。

qmb5sa22

qmb5sa222#

在PostgreSQL 15中,处理用户的表创建权限的方式发生了变化。与pgAdmin没有直接关系,但我认为人们可能会遇到这个问题。
通常,在允许用户在数据库中创建表之后,您不必特别定义他们在SCHEMA中有这样做的权限,因为public将是默认的。
在PostgreSQL 15中,这已经改变了(source):
PostgreSQL 15还从公共(或默认)模式中撤销除数据库所有者之外的所有用户的CREATE权限。
因此,将得到以下错误:
ERROR: permission denied for schema public
现在你的流程应该看起来像这样:

CREATE DATABASE EXAMPLE_DB;
CREATE USER EXAMPLE_USER WITH ENCRYPTED PASSWORD 'Sup3rS3cret';
GRANT ALL PRIVILEGES ON DATABASE EXAMPLE_DB TO EXAMPLE_USER;
\c EXAMPLE_DB postgres
# You are now connected to database "EXAMPLE_DB" as user "postgres".
GRANT ALL ON SCHEMA public TO EXAMPLE_USER;

当然可以根据需要更改权限。
最后一步,我们明确地告诉EXAMPLE_USEREXAMPLE_DB中的模式public具有特权,这在PostgreSQL 15中引入。

g6ll5ycj

g6ll5ycj3#

1.转到popsql上的首选项设置
1.连接
1.删除您拥有的连接
1.添加新的连接填写表单-连接名称(由您决定)-打开连接类型“直接从我的计算机连接”-主机名:localhost(在输入localhost之前,打开连接类型“connect directly from mycomputer”)-port:3306 -数据库名称:与之前在cmd sql -username上创建的相同:根

相关问题