授予角色特权后,Postgres 无法创建数据库

发布于 2024-11-07 11:06:11 字数 843 浏览 0 评论 0原文

我确信我错过了一些简单的东西,但我创建了以下内容:(

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 文档< /a> 了解原因。

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

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

我缺少什么?

I'm sure I'm missing something simple, but I've created the following:

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}

(Note that Cannot login and No inheritance don't affect what's happening to wade, here. See the PostgreSQL documentation for role membership to understand why. —bignose)

However, when I try to create a db, I get:

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

What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Oo萌小芽oO 2024-11-14 11:06:11

手册摘录:

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

(强调我的)。

An excerpt from the manual:

The INHERIT attribute governs inheritance of grantable privileges (that is, access privileges for database objects and role memberships). It does not apply to the special role attributes set by CREATE ROLE and ALTER ROLE. For example, being a member of a role with CREATEDB privilege does not immediately grant the ability to create databases, even if INHERIT is set; it would be necessary to become that role via SET ROLE before creating a database.

(Emphasis mine).

稀香 2024-11-14 11:06:11

在文档中:

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

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

In documentation:

The role attributes LOGIN, SUPERUSER, CREATEDB, and CREATEROLE can be thought of as special privileges, but they are never inherited as ordinary privileges on database objects are. You must actually SET ROLE to a specific role having one of these attributes in order to make use of the attribute

So you must activate admin role using SET ROLE admin; before creating DB.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文