关系被拒

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

select * from site_adzone;

我得到了这个错误

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

这里有什么问题呢?

我也试着为其他表做选择,得到了同样的问题。我也试着这样做:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

但我收到了控制台的回复

警告:“jerry"

有人知道是哪里出了问题吗?

641892 次浏览

数据库上的GRANT不是您所需要的。格兰特直接在桌子上。

在数据库上授予特权主要用于授予或撤销连接特权。这允许您指定谁可以在数据库中做一些事情,如果他们有足够的其他权限的话。

你想要的是:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

这将解决这个问题。

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

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

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

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

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

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;

如果你使用SERIALBIGSERIAL列,那么你可能会想对SEQUENCES做同样的事情,否则你的INSERT将失败(Postgres 10的IDENTITY没有这个问题,建议在SERIAL类型之上),即。

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

参见我对PostgreSQL权限的Web应用程序的回答,了解更多细节和可重用脚本。

裁判:

GRANT

ALTER DEFAULT PRIVILEGES

第一步和重要的步骤连接到你的db:

psql -d yourDBName

第二步,授予特权

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

确保您以表的所有者身份登录psql。 使用\dt

来找出谁拥有这些表

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

然后你就可以运行GRANTS了

当您以postgres用户创建一个表,然后试图以普通用户访问它时,这种情况经常发生。 在这种情况下,最好以postgres用户登录,并使用

命令更改表的所有权
alter table <TABLE> owner to <USER>;
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;

由于您正在寻找选择权限,我建议您只授予选择权限,而不是所有权限。你可以这样做:

GRANT SELECT ON <table> TO <role>;

你应该:

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

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

修复是简单地把所有的权利从老用户给新用户:

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

PostgreSQL。在bash终端上运行:

psql db_name -c "GRANT ALL ON ALL TABLES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to db_user;"