Postgres не может создать БД после предоставления привилегий на роль - PullRequest
3 голосов
/ 15 мая 2011

Я уверен, что упускаю что-то простое, но я создал следующее:

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

Чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 15 мая 2011

Отрывок из руководства :

Атрибут INHERIT управляет наследованием предоставляемых привилегий (то есть привилегий доступа для объектов базы данных и членства в ролях).Это не относится к специальным атрибутам роли, установленным CREATE ROLE и ALTER ROLE. Например, членство в роли с привилегией CREATEDB не дает немедленной возможности создавать базы данных, даже если INHERIT установлен ;эту роль необходимо выполнить с помощью SET ROLE до создания базы данных.

(выделение мое).

0 голосов
/ 29 декабря 2018

В документации:

Атрибуты роли LOGIN, SUPERUSER, CREATEDB и CREATEROLE могут рассматриваться как специальные привилегии, но они никогда не наследуются как обычные привилегии для объектов базы данных. На самом деле вы должны установить ROLE для конкретной роли, имеющей один из этих атрибутов, чтобы использовать атрибут

Таким образом, вы должны активировать admin роль, используя SET ROLE admin; перед созданием БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...