cpb*_*e94 56 database postgresql permission-denied pgadmin pgadmin-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
Run Code Online (Sandbox Code Playgroud)
是我权限不够吗?如果是,我如何授予自己查看该表的权限?我可以看到 AACT 数据库中不同模式的其他表。我读过一些用户建议通过以下方式授予自己权限,但没有运气:
ERROR: permission denied for schema public
LINE 1: SELECT * FROM public.complete_oncology
^
SQL state: 42501
Character: 15
Run Code Online (Sandbox Code Playgroud)
这只会出现一个错误:
ERROR: relation "complete_oncology" does not exist
SQL state: 42P01
Run Code Online (Sandbox Code Playgroud)
eay*_*din 111
在 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;
Run Code Online (Sandbox Code Playgroud)
显然,根据需要更改权限。
最后一步,我们明确告诉PostgreSQL 15 中引入了对其中的EXAMPLE_USER
模式具有特权。public
EXAMPLE_DB
Lau*_*lbe 30
如果您得到 的“权限被拒绝” public.complete_oncology
,但 的“关系不存在” ,则只能意味着一件事:您对该架构complete_oncology
没有权限。USAGE
public
获取要运行的模式的所有者
GRANT USAGE ON SCHEMA public TO your_user;
Run Code Online (Sandbox Code Playgroud)
然后您应该能够看到该表。如果您仍然缺乏对表本身的权限,请让所有者SELECT
也授予您对表的权限。
Fly*_*ngV 26
总而言之:
更改数据库 my_database 所有者为 my_database_user;
理由: 最近进行了一些更改来提高 POSTGRES 的安全性,具体取决于数据库的创建方式和创建者。总而言之,现在您可能需要指定除了拥有权限之外,您还是数据库的所有者。
解决方案:更改数据库 my_database 所有者为 my_database_user;
归档时间: |
|
查看次数: |
70685 次 |
最近记录: |