Permission denied for relation
我试着运行简单的sql命令:
1  | SELECT * FROM site_adzone;  | 
我收到了这个错误
1  | ERROR:  permission denied FOR relation site_adzone  | 
这可能是什么问题?
我也尝试选择其他表并得到同样的问题。 我也试过这样做:
1  | GRANT ALL PRIVILEGES ON DATABASE jerry TO tom;  | 
但我从控制台得到了这个回应
1  | WARNING:  no privileges were GRANTED FOR"jerry"  | 
你知道什么是错的吗?
数据库上的GRANT不是您所需要的。直接在表格上授予权利。
授予数据库权限主要用于授予或撤消连接权限。这允许您指定谁可以在数据库中执行具有足够其他权限的内容。
你想要的是:
1  |  GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;  | 
这将解决这个问题。
发布Ron E回答所有表的授予权限,因为它可能对其他人有用。
1  | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;  | 
首先连接到正确的数据库,然后运行:
1  | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;  | 
1 2 3  | 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;  | 
要为架构中的所有现有表授予权限,请使用:
1  | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>  | 
要指定将应用于将来表的默认权限,请使用:
1 2  | ALTER DEFAULT PRIVILEGES IN SCHEMA <schema>  GRANT <privileges> ON TABLES TO <role>;  | 
例如
1 2  | ALTER DEFAULT PRIVILEGES IN SCHEMA public  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;  | 
如果您使用
1  | ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;  | 
有关更多详细信息和可重用脚本,另请参阅我对Web应用程序的PostgreSQL权限的答案。
参考:
GRANT
更改默认权限
第一个重要的步骤是连接到您的数据库:
1  | psql -d yourDBName  | 
2步,授予权限
1  | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;  | 
当您将表创建为用户postgres然后尝试以普通用户身份访问时,这种情况经常发生。在这种情况下,最好再次以postgres身份登录,并使用ALTER TABLE OWNER给someuser将表所有权更改为将使用该表的用户。
确保以表的所有者身份登录psql。
找出谁拥有表使用
那么你可以运行GRANTS
我曾经遇到过这个问题。只需将数据库用户更改为超级用户即可解决问题。
ALTER USER myuser WITH SUPERUSER;