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

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}

请注意,这里的“无法登录”和“没有继承”并不影响“wade”正在发生的事情。了解原因,请参阅PostgreSQL文档中的角色成员资格。 —bignose 然而,当我尝试创建一个数据库时,我得到以下错误:
bin wwilliam$ createdb -U wade test
Password:
createdb: database creation failed: ERROR:  permission denied to create database

我漏掉了什么?

1
也许“无法登录”是原因。 - hsmiths
不行 - 我可以使用用户wade的登录。 - wadesworld
尝试登录并运行CREATE DATABASE。 - Kevin
@Kevin - 同样的问题,权限被拒绝。 - wadesworld
2个回答

10
来自手册的摘录:

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

(重点是我加粗的部分)

0
在文档中:
角色属性 LOGIN、SUPERUSER、CREATEDB 和 CREATEROLE 可以被视为特殊权限,但它们从不像普通权限那样被继承到数据库对象上。您必须实际上使用 SET ROLE 命令将当前会话切换到具有这些属性之一的特定角色,才能利用该属性。
因此,在创建数据库之前,您必须使用 SET ROLE admin; 命令激活 admin 角色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接