Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建PostgreSQL只读用户错误:关系\u foo的权限被拒绝_Sql_Postgresql_Privileges_Ckan - Fatal编程技术网

创建PostgreSQL只读用户错误:关系\u foo的权限被拒绝

创建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

我在尝试在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 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>中更改默认设置。 更多相关答案:


我研究了您的pastebin链接,实际授予权限发生在第一页评论中引用的另一个pastebin:。此文件的内容应在您的问题中。链接消失,然后你的问题就没有意义了。请编辑。感谢您的帮助,但这似乎不是搜索路径问题。ckan_default会看到public.\u foo但readonlyuser不会<代码>$sudo-u postgres psql-d数据存储\u default-u readonlyuser-c'SELECT*FROM public.\u foo'错误:模式公共行1:SELECT*FROM public的权限被拒绝。\u foo^如果我使用用户postgres或ckan\u default运行\z,我会得到这个
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默认值