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

select * from site_adzone;

我得到了这个错误

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

这里有什么问题呢?

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

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

但我收到了控制台的回复

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

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


当前回答

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

其他回答

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;

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

alter table <TABLE> owner to <USER>;

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

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

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

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

然后你就可以运行GRANTS了

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

GRANT SELECT ON <table> TO <role>;