400

我尝试运行简单的 SQL 命令:

select * from site_adzone;

我得到了这个错误

错误:关系 site_adzone 的权限被拒绝

这里可能是什么问题?

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

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

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

警告:没有授予“杰瑞”特权

有谁知道可能出了什么问题?

4

11 回答 11

486

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

授予数据库权限主要用于授予或撤销连接权限。如果他们有足够的其他权限,这允许您指定谁可以在数据库中执行操作。

你想要:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

这将解决这个问题。

于 2013-03-20T11:41:55.033 回答
312

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

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
于 2016-05-23T11:22:31.163 回答
111

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

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
于 2017-01-01T20:00:43.320 回答
79
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;
于 2018-07-18T10:36:59.030 回答
37

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

psql -d yourDBName

2步,授予权限

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
于 2018-05-02T13:05:26.103 回答
26

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

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

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

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

例如

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

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

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

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

参考:

授予

更改默认权限

于 2017-10-09T18:31:03.973 回答
14

当您以用户 postgres 创建表,然后尝试以普通用户身份访问它时,经常会发生这种情况。在这种情况下,最好以 postgres 用户身份登录并使用以下命令更改表的所有权:

alter table <TABLE> owner to <USER>;
于 2018-05-22T04:13:49.880 回答
8

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

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

然后你可以运行 GRANTS

于 2018-05-15T17:30:02.183 回答
2

你应该:

  1. 使用 postgres 用户通过 DBeaver 连接到数据库
  2. 在左侧选项卡上打开您的数据库
  3. 打开角色选项卡/下拉列表
  4. 选择您的用户
  5. 在右侧选项卡上按“权限选项卡”
  6. 按您的架构选项卡
  7. 按表格选项卡/下拉列表
  8. 选择所有表
  9. 选择所有必需的权限复选框(或按全部授予)
  10. 按保存
于 2020-03-19T08:03:55.033 回答
0

当您正在寻找选择权限时,我建议您仅授予选择权限而不是所有权限。您可以通过以下方式做到这一点:

GRANT SELECT ON <table> TO <role>;
于 2020-01-08T15:33:45.903 回答
0

在将用户切换到另一个也需要具有相同权限的用户后,我遇到了这个问题,我一直收到错误:“必须是关系 xx 的所有者”

解决方法是简单地将旧用户的所有权利授予新用户:

postgres-# Grant <old user> to <new user>;

于 2021-08-20T19:02:27.823 回答