2010-01-26 58 views
9

我遇到了PostgreSQL非常恼人的角色继承问题。根据documentation,它的行为不符合要求。PostgreSQL角色继承不起作用?

我想拥有主角色,并将其权限授予新创建的用户。这些用户应该继承权限,而无需手动发出SET ROLE

CREATE ROLE testrole NOSUPERUSER INHERIT CREATEDB NOCREATEROLE; 
CREATE ROLE testuser LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; 
GRANT testrole TO testuser; 

现在我连为testuser后,我得到如下:

postgres=> CREATE DATABASE foobar; 
ERROR: permission denied to create database 
postgres=> SET ROLE testrole; 
SET 
postgres=> CREATE DATABASE foobar; 
CREATE DATABASE 

根据上面链接(因为继承选项的)的文档,该SET ROLE不应要求。

我在这里错过了什么?

回答

18

阿位进一步下跌的同一页:

“的角色属性LOGIN,SUPERUSER,CREATEDB和CREATEROLE可以认为是特殊的权限,但他们从来没有继承的对数据库对象的普通权限是你。实际上必须将角色设置为具有这些属性之一的特定角色才能使用该属性。“