Postgres在授予角色权限后无法创建数据库

时间:2011-05-15 02:13:22

标签: postgresql grant

我确定我遗漏了一些简单的东西,但我创造了以下内容:

postgres=# \du
                          List of roles
 Role name |               Attributes                | Member of
-----------+-----------------------------------------+-----------
 admin     | No inheritance, Create DB, Cannot login | {}
 postgres  | Superuser, Create role, Create DB       | {}
 wade      |                                         | {admin}

(请注意Cannot loginNo inheritance不会影响wade所发生的事情。请参阅PostgreSQL documentation for role membership了解原因。-bignose)

但是,当我尝试创建数据库时,我得到:

bin wwilliam$ createdb -U wade test
Password:
createdb: database creation failed: ERROR:  permission denied to create database

我错过了什么?

2 个答案:

答案 0 :(得分:7)

摘自manual

  

INHERIT属性控制可授予权限的继承(即数据库对象和角色成员身份的访问权限)。它不适用于CREATE ROLE和ALTER ROLE设置的特殊角色属性。 例如,作为具有CREATEDB权限的角色的成员,即使设置了INHERIT,也不会立即授予创建数据库的能力;在创建数据库之前,有必要通过SET ROLE成为该角色。

(强调我的)。

答案 1 :(得分:0)

在文档中:

  

可以将角色属性LOGIN,SUPERUSER,CREATEDB和CREATEROLE视为特殊特权,但它们永远不会像数据库对象的普通特权那样被继承。实际上,您必须将ROLE设置为具有这些属性之一的特定角色,才能使用该属性

因此,在创建数据库之前,您必须使用admin激活SET ROLE admin;角色。