创建PostgreSQL只读用户错误:关系\u foo的权限被拒绝
我在尝试在PostgreSQL中创建只读用户时遇到问题 我希望用户ckan_default在数据库数据存储中创建表。 我想让readonlyuser在datastore\u default中读取ckan\u default创建的表。 我希望此规则应用于将由ckan_default创建的表,而不仅仅是已经创建的表创建PostgreSQL只读用户错误:关系\u foo的权限被拒绝,sql,postgresql,privileges,ckan,Sql,Postgresql,Privileges,Ckan,我在尝试在PostgreSQL中创建只读用户时遇到问题 我希望用户ckan_default在数据库数据存储中创建表。 我想让readonlyuser在datastore\u default中读取ckan\u default创建的表。 我希望此规则应用于将由ckan_default创建的表,而不仅仅是已经创建的表 GRANT CONNECT ON DATABASE datastore_default TO readonlyuser; GRANT USAGE ON SCHEMA public TO
GRANT CONNECT ON DATABASE datastore_default TO readonlyuser;
GRANT USAGE ON SCHEMA public TO readonlyuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyuser;
ALTER DEFAULT PRIVILEGES FOR USER readonlyuser IN SCHEMA public GRANT SELECT ON TABLES TO readonlyuser;
实际上,我运行的完整脚本是
sudo -u postgres psql postgres -f /tmp/set_permissions.sql
--content of /tmp/set_permissions.sql
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE USAGE ON SCHEMA public FROM PUBLIC;
GRANT CREATE ON SCHEMA public TO ckan_default;
GRANT USAGE ON SCHEMA public TO ckan_default;
GRANT CREATE ON SCHEMA public TO ckan_default;
GRANT USAGE ON SCHEMA public TO ckan_default;
REVOKE CONNECT ON DATABASE ckan_default FROM readonlyuser;
GRANT CONNECT ON DATABASE datastore_default TO readonlyuser;
GRANT USAGE ON SCHEMA public TO readonlyuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyuser;
ALTER DEFAULT PRIVILEGES FOR USER ckan_default IN SCHEMA public
GRANT SELECT ON TABLES TO readonlyuser;
我读了这篇文章,要么尝试了,要么对将要创建的表无效
有关更多详细信息和完整脚本,请查看pastebin我怀疑所有用户的
搜索路径
都设置为典型默认路径
"$user",public
这意味着没有模式限定的\u foo
将解析为$user.\u foo
:
用于ckan_default.\u foo
,以及ckan_default
用于readonlyuser.\u foo
readonlyuser
sudo -u postgres psql -d datastore_default -U ckan_default -c 'CREATE TABLE public._foo()'
sudo -u postgres psql -d datastore_default -U ckan_default -c 'SELECT * FROM public._foo'
sudo -u postgres psql -d datastore_default -U readonlyuser -c 'SELECT * FROM public._foo'
如果是这样的话,考虑为每个用户更改默认<代码> SexChyPATH < /C> >:
ALTER ROLE ckan_default SET search_path=public;
ALTER ROLE readonlyuser SET search_path=public;
或者任何适合你需要的东西。还要考虑在<代码> PostgreSQL .CONF < < /P>中更改默认设置。 更多相关答案:
sudo-u postgres psql-d数据存储\u default-u
ckan_default=arwdDxt/ckan_default+| datastore_default=r/ckan_default+| readonlyuser=r/ckan_default | ckan_default=arwdDxt/ckan_default+| datastore_default=r/ckan|default+| readonlyuser=r/ckan|default
但readonlyser得到一个空行。sudo-u postgres psql-d readonlyuser-u更多详细信息此处有任何线索吗?sudo-u postgres dropuser readonlyuser
似乎有一些特权链接到了readonlyuser反正dropuser:删除角色“readonlyuser”失败:错误:角色“readonlyser”无法删除,因为某些对象依赖于它详细信息:属于角色postgres的新关系的默认权限架构中的公共权限属于角色ckan的新关系的默认权限架构中的默认权限数据库数据存储的架构公共权限的公共权限数据库中的默认4对象数据存储\u默认值