在使用postgis扩展创建postgresql数据库“map”的过程中,通过CREATE EXTENSION postgis;
,用户“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的权限调整为超级用户,但我有兴趣知道为什么如果mapmaker被授予数据库映射的所有权限,情况就是这样吗?扩展是否区别对待?为了使用扩展,用户必须是用户级超级用户,还是可以在数据库级别分配权限?
我确实看到了cannot create extension without superuser role,但问题的答案并没有解释为什么,不幸的是,我没有足够的观点来评论,因此这个问题。
PostgreSQL 9.1.9 PostGIS 2.0.3
答案 0 :(得分:6)
在Packaging Related Objects into an Extension中,文档告知扩展名为superuser
参数,当设置为true
时,表示只有超级用户可以安装或升级扩展程序。
这就是PostGIS的情况,可能是因为它是用C语言实现的,它对整个集群和数据目录的作用没有限制,而不仅仅是一个数据库。超级用户拥有整个群集的权限,单个数据库的所有者没有权限。
正如需要超级用户权限来在C语言中创建单个函数一样,出于同样的原因,同样的规则也适用于整个postgis扩展。