关系允许被拒绝

Bob*_*ban 305 postgresql privileges grant postgresql-9.2

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

select * from site_adzone;
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误

ERROR:  permission denied for relation site_adzone
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?

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

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
Run Code Online (Sandbox Code Playgroud)

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

WARNING:  no privileges were granted for "jerry"
Run Code Online (Sandbox Code Playgroud)

你知道什么是错的吗?

Chr*_*ers 354

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

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

你想要的是:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
Run Code Online (Sandbox Code Playgroud)

这将解决这个问题.

  • @Shadur授予SCHEMA公共所有表格的所有特权至杰里; (183认同)
  • 这可能是某种捷径吗?在所有表格上授予所有特权? (18认同)
  • @RonE是否仅限于当前数据库? (10认同)
  • 像超级用户一样运行它,比如postgres. (7认同)
  • @zmiftah您需要的架构>在SCHEMA nameSchema上授予用户所有权限; (7认同)
  • 好的,我得到了答案,对其他人来说可能是显而易见的,但对我来说不是.我执行了命令并获得了响应GRANT,但它不允许我运行任何查询.经过大量的反复试验后,我意识到我必须先以超级用户身份*连接*,然后授予权限.所以回答@Shadur的问题是肯定它肯定仅限于当前的数据库. (4认同)
  • 你可能也需要这个(用'SEQUENCES`替换'TABLES`):`在SCHEMA公共场所的所有序列中授予所有特权给jerry;` (4认同)

sag*_*sag 221

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

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
Run Code Online (Sandbox Code Playgroud)

  • 您可能还需要为"ALL SEQUENCES"和"ALL FUNCTIONS"执行类似的命令. (20认同)
  • 只是对于那些想知道的人:"所有表格"还包括视图,因此没有单独的"所有视图"命令:-) (6认同)
  • 愚蠢的问题,但是为什么简单地“将 SCHEMA public 上的所有特权授予 jerry;”不提供对模式内表的选择访问权限? (3认同)

小智 68

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

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
Run Code Online (Sandbox Code Playgroud)

  • 连接到正确的数据库是一个巨大的dufference :)`\ connect databasename;` (12认同)
  • 谢谢连接到正确的数据库是不是我以前做的! (4认同)
  • 这个。我一直都与“ postgres”建立联系。谢谢! (3认同)
  • 是的,连接到数据库有所作为 (2认同)

小智 33

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;
Run Code Online (Sandbox Code Playgroud)


isa*_*pir 17

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

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>
Run Code Online (Sandbox Code Playgroud)

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

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;
Run Code Online (Sandbox Code Playgroud)

例如

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;
Run Code Online (Sandbox Code Playgroud)

如果你使用SERIALBIGSERIAL列,那么你可能想要做同样的SEQUENCES事情,否则你的INSERT意志会失败(Postgres 10'sIDENTITY不会遇到这个问题,建议超过SERIAL类型),即

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息和可重用脚本,另请参阅我对Web应用程序的PostgreSQL权限的答案.

参考:

GRANT

更改默认权限


zon*_*ond 15

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

psql -d yourDBName
Run Code Online (Sandbox Code Playgroud)

2步,授予权限

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
Run Code Online (Sandbox Code Playgroud)


小智 7

你应该:

  1. 使用 DBeaver 连接到数据库,用户名为 postgres
  2. 在左侧选项卡上打开您的数据库
  3. 打开“角色”选项卡/下拉列表
  4. 选择您的用户
  5. 在右侧选项卡上按“权限选项卡”
  6. 按您的模式选项卡
  7. 按表选项卡/下拉菜单
  8. 选择所有表
  9. 选择所有必需的权限复选框(或按全部授予)
  10. 按保存


Bri*_*all 5

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

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

那么你可以运行格兰特


Bru*_*uce 5

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


归档时间:

查看次数:

359417 次

最近记录:

6 年,2 月 前