5

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

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

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

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

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

我确实看到没有超级用户角色就无法创建扩展,但问题的答案没有解释原因,不幸的是,我没有足够的评论点,因此这个问题。

PostgreSQL 9.1.9 PostGIS 2.0.3

4

1 回答 1

6

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

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

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

于 2013-10-09T17:48:43.810 回答