2013-10-05 316 views
5

在创建PostgreSQL数据库“地图”,它采用了PostGIS的扩展的过程中,通过CREATE EXTENSION postgis;,用户“绘图者”得到以下错误:的Postgres创建扩展PostGIS的错误

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

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

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

一旦绘图者是在用户级超级用户我不再收到错误并且扩展创建让我明白了一切我所要做的就是调整permiss通过postgres用户将地图制作者分配给超级用户,但是我有兴趣知道为什么地图制作者被授予数据库地图的所有权限?扩展区别对待吗?为了使用扩展,用户必须是用户级超级用户还是可以在数据库级别分配权限?

我确实看到了cannot create extension without superuser role,但问题的答案没有解释为什么,并且很遗憾,我没有足够的评论意见,因此提出了问题。

的PostgreSQL 9.1.9的PostGIS 2.0.3

回答

6

Packaging Related Objects into an Extension,商务部告诉分机有一个superuser参数,当设置为true,表示只有超级用户可以安装或升级扩展。

这就是PostGIS的情况,大概是因为在C语言中实现,所以对整个集群和数据目录可以做的事情没有限制,而不仅仅是一个数据库。超级用户拥有整个群集的权限,而单个数据库的所有者不具有这个权限。

正如需要使用超级用户权限来创建C语言中的单个函数一样,同样的规则适用于整个postgis扩展也是有道理的。