我试图运行简单的SQL命令:
select * from site_adzone;
我得到这个错误
ERROR: permission denied for relation site_adzone
可能是什么问题吗?
我想也是这样做选择其他表,得到了同样的问题。 我也试着这样做:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
但我从控制台这个响应
WARNING: no privileges were granted for "jerry"
你有一些想法什么都可以错了吗?
在数据库上GRANT是不是你所需要的。 授予直接的表。
该数据库主要用于授予或撤销连接权限上授予权限。 这使您可以指定谁可以做的东西在数据库中,如果他们有足够的其他权限。
你想,而不是:
GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
这将需要这个问题的关心。
在所有表过帐授予权限罗恩é回答,因为它可能是有用的人。
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 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 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;
如果您使用SERIAL
或BIGSERIAL
列,那么你可能会想为做同样的SEQUENCES
,否则你的INSERT
操作会失败( Postgres的10的IDENTITY
不会从问题的困扰,并建议在SERIAL
类型),即
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;
另见我的回答对PostgreSQL的权限Web应用程序的更多细节和可重复使用的脚本。
参考:
GRANT
ALTER缺省权限
第一个重要的步骤是连接到您的数据库:
psql -d yourDBName
2步骤,授予权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
请确保您登录到PSQL作为表的所有者。 找出谁拥有该表使用\dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
然后你可以运行补助金
当你创建一个表作为用户的Postgres,然后尝试访问它作为一个普通用户经常发生这种情况。 在这种情况下,最好再次登录,对于Postgres和使用ALTER TABLE所有者SomeUser的改变表所有权谁将会使用表用户。