【发布时间】:2015-06-08 13:02:42
【问题描述】:
我创建了一个名为“common”的用户组和一个名为“application”的用户。下面的脚本:
CREATE ROLE common NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT;
GRANT USAGE ON SCHEMA portal TO common;
GRANT ALL ON ALL TABLES IN SCHEMA portal TO common;
GRANT ALL ON ALL SEQUENCES IN SCHEMA portal TO common;
CREATE ROLE application INHERIT LOGIN PASSWORD 'xxxxxx';
GRANT common TO application;
为了确保权限已应用于用户“应用程序”,我执行了以下返回 true 的命令:
select has_table_privilege ('application', 'portal.noticias', 'delete')
return: t
select has_schema_privilege ('application', 'portal', 'usage')
return: t
使用用户“application”,您可以在“portal.noticias”表中插入、更新和选择数据,但是在尝试删除记录时会出现以下错误:
ERROR: permission denied for schema portal
LINE 1: SELECT 1 FROM ONLY "portal"."noticias" x WHERE "codnoticia" ... ^
QUERY: SELECT 1 FROM ONLY "portal"."noticias" x WHERE "codnoticia" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x
我不知道我做错了什么,但我感谢任何帮助。
【问题讨论】:
-
表是如何定义的?我只是尝试用您发布的内容重现问题,它对我有用。也许该表有一个 ON DELETE 触发器,或者其他什么?
-
没有触发器
-
我意识到,即使现在尝试使用 postgres root 用户删除记录,也会发生同样的错误。现在我知道错误不是权限。但是,我不知道它是什么。
-
将 psql 中 \d+ portal.noticias 的输出添加到您的问题中 - 最好添加在新的空数据库中重现问题所需的所有 SQL。
-
谢谢阿乔。为了复制同样的情况,我提供了两个脚本文件。第一个用于创建数据库 (goo.gl/kIgFC4),第二个用于基本操作 (goo.gl/e9cfCb),尤其是删除。
标签: postgresql-9.3 permission-denied user-permissions