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

select * from site_adzone;

我得到了这个错误

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

这里有什么问题呢?

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

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

但我收到了控制台的回复

警告:没有特权授予“jerry”

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


当前回答

你应该:

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

其他回答

你应该:

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

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

alter table <TABLE> owner to <USER>;

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

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>;

e.g.

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

如果你使用SERIAL或BIGSERIAL列,那么你可能会对SEQUENCES做同样的事情,否则你的INSERT将会失败(Postgres 10的IDENTITY不会受到这个问题的困扰,并且建议在SERIAL类型中使用),即。

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

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

裁判:

格兰特

更改默认权限

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

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

然后你就可以运行GRANTS了