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 loginandNo inheritanceは に起こっていることに影響を与えないことに注意してください。理由を理解するには、ロール メンバーシップに関する PostgreSQL のドキュメントをwade参照してください。—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 は特別な権限と考えることができますが、データベース オブジェクトに対する通常の権限のように継承されることはありません。属性を利用するには、実際にこれらの属性のいずれかを持つ特定のロールに ROLE を設定する必要があります

したがって、DB を作成する前に、admin使用してロールをアクティブ化する必要があります。SET ROLE admin;

于 2018-12-29T01:48:28.483 に答える