5

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

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 login不要No inheritance影响wade这里发生的事情。请参阅PostgreSQL 文档了解角色成员身份以了解原因。-bignose)

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

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

我错过了什么?

4

2 回答 2

9

手册摘录:

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

(强调我的)。

于 2011-05-15T08:13:39.287 回答
0

在文档中:

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

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

于 2018-12-29T01:48:28.483 回答