【问题标题】:postgres create extension postgis errorpostgres 创建扩展 postgis 错误
【发布时间】:2013-10-05 01:33:47
【问题描述】:

在通过CREATE EXTENSION postgis;创建使用postgis扩展的postgresql数据库“map”的过程中,用户“mapmaker”得到以下错误:

permission denied to create extension "postgis" 
HINT:  Must be superuser to create this extension. 

但是用户“mapmaker”是sudo -u postgres psql通过命令指定的数据库所有者:

CREATE DATABASE map OWNER mapmaker; 
GRANT ALL PRIVILEGES ON DATABASE map TO mapmaker; 

一旦 mapmaker 是用户级别的超级用户,我就不再收到错误并且扩展程序已创建,所以我知道我所要做的就是通过 postgres 用户将 mapmaker 的权限调整为超级用户,但我很想知道为什么如果地图制作者被授予数据库地图的所有权限,情况是否如此?扩展名是否被区别对待?为了使用扩展,用户必须是用户级别的超级用户还是可以在数据库级别分配权限?

我确实看到了cannot create extension without superuser role,但问题的答案没有解释原因,不幸的是,我没有足够的评论点,因此提出了这个问题。

PostgreSQL 9.1.9 PostGIS 2.0.3

【问题讨论】:

    标签: postgresql-9.1 postgis


    【解决方案1】:

    在Packaging Related Objects into an Extension 中,文档告诉扩展程序有一个superuser 参数,当设置为true 时,表示只有超级用户可以安装或升级扩展程序。

    所以 PostGIS 就是这样,大概是因为它是用 C 语言实现的,它对整个集群和数据目录的作用是没有限制的,而不仅仅是一个数据库。超级用户拥有整个集群的权限,而单个数据库的所有者则没有。

    正如在 C 语言中创建单个函数需要超级用户权限一样,出于同样的原因,同样的规则将适用于整个 postgis 扩展是有意义的。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      相关资源
      最近更新 更多