为什么我在 pgAdmin 4 上遇到公共架构权限被拒绝的错误?

问题描述 投票:0回答:4

我正在尝试在 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
postgresql pgadmin pgadmin-4
4个回答
50
投票

在 PostgreSQL 15 中,用户处理表创建权限的方式发生了变化。与 pgAdmin 没有直接关系,但我认为人们可能会遇到这个问题。

通常,在允许用户在数据库中创建表后,您不必专门定义他们有权在 SCHEMA 中执行此操作,因为

public
将是默认的。

在 PostgreSQL 15 中,这种情况发生了变化(来源):

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_USER
public
中的模式
EXAMPLE_DB
具有特权,这是在 PostgreSQL 15 中引入的。


19
投票

如果您收到

public.complete_oncology
的“权限被拒绝”,但
oncology
的“关系不存在”,则只能意味着一件事:您对
USAGE
架构没有
public
权限。

获取要运行的架构的所有者

GRANT USAGE ON SCHEMA public TO your_user;

然后您应该能够看到该表。如果您仍然缺乏对表本身的权限,请让所有者也授予您对表的

SELECT
权限。


0
投票

TLDR

将数据库 my_database 所有者更改为 my_database_user;

理由: 最近进行了一些更改来提高 POSTGRES 的安全性,具体取决于数据库的创建方式和创建者。总而言之,现在您可能需要指定除了拥有权限之外,您还是数据库的所有者。

解决方案: 将数据库 my_database 所有者更改为 my_database_user;


-3
投票
  1. 转到 popsql 上的首选项设置
  2. 连接
  3. 删除您拥有的连接
  4. 添加新连接 填表格 - 连接名称(由您决定) - 打开连接类型“直接从我的计算机连接” -hostname : localhost(在输入 localhost 之前,请打开连接类型“connect direct from mycomputer”) -端口:3306 -数据库名称:与您之前在 cmd sql 上创建的数据库名称相同 -用户名:root
© www.soinside.com 2019 - 2024. All rights reserved.