关系允许被拒绝

问题描述 投票:275回答:9

我试着运行简单的sql命令:

select * from site_adzone;

我收到了这个错误

ERROR:  permission denied for relation site_adzone

这可能是什么问题?

我也尝试选择其他表并得到同样的问题。我也试过这样做:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

但我从控制台得到了这个回应

WARNING:  no privileges were granted for "jerry"

你知道什么是错的吗?

postgresql privileges postgresql-9.2 grant
9个回答
327
投票

数据库上的GRANT不是您所需要的。直接在表格上授予权利。

授予数据库权限主要用于授予或撤消连接权限。这允许您指定谁可以在数据库中执行具有足够其他权限的内容。

你想要的是:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

这将解决这个问题。


208
投票

发布Ron E回答所有表的授予权限,因为它可能对其他人有用。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

58
投票

首先连接到正确的数据库,然后运行:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

23
投票
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

17
投票

要为架构中的所有现有表授予权限,请使用:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

要指定将应用于将来表的默认权限,请使用:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

EG

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

如果您使用SERIALBIGSERIAL列,那么您可能希望对SEQUENCES执行相同操作,否则您的INSERT将失败(Postgres 10's IDENTITY不会遇到该问题,建议使用SERIAL类型),即

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

另请参阅我对PostgreSQL Permissions for Web App的回答以获取更多详细信息和可重用的脚本。

参考:

GRANT

ALTER DEFAULT PRIVILEGES


13
投票

第一个重要的步骤是连接到您的数据库:

psql -d yourDBName

2步,授予权限

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

4
投票

确保以表的所有者身份登录psql。找出谁拥有表使用\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

那么你可以运行GRANTS


4
投票

当您将表创建为用户postgres然后尝试以普通用户身份访问时,这种情况经常发生。在这种情况下,最好再次以postgres身份登录,并使用ALTER TABLE OWNER给someuser将表所有权更改为将使用该表的用户。


-1
投票

我曾经遇到过这个问题。只需将数据库用户更改为超级用户即可解决问题。

ALTER USER myuser WITH SUPERUSER;

© www.soinside.com 2019 - 2024. All rights reserved.