Наследование ролей PostgreSQL не работает? - PullRequest
12 голосов
/ 26 января 2010

Я столкнулся с очень раздражающей проблемой наследования ролей в PostgreSQL. В соответствии с документацией .

он просто не ведет себя должным образом

Я хотел бы иметь главную роль и предоставить ее разрешения вновь созданным пользователям. Эти пользователи должны наследовать разрешения без ручного ввода SET ROLE.

CREATE ROLE testrole NOSUPERUSER INHERIT CREATEDB NOCREATEROLE;
CREATE ROLE testuser LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;
GRANT testrole TO testuser;

Теперь, после подключения как testuser, я получаю следующее:

postgres=> CREATE DATABASE foobar;
ERROR:  permission denied to create database
postgres=> SET ROLE testrole;
SET
postgres=> CREATE DATABASE foobar;
CREATE DATABASE

Согласно документам, указанным выше (из-за опции INHERIT), SET ROLE не требуется.

Что мне здесь не хватает?

1 Ответ

23 голосов
/ 26 января 2010

Чуть дальше вниз по той же странице:

"Атрибуты роли LOGIN, SUPERUSER, CREATEDB и CREATEROLE могут рассматриваться как специальные привилегии, но они никогда не наследуются как обычные привилегии для объектов базы данных. Фактически вы должны УСТАНОВИТЬ РОЛЬ для конкретной роли, имеющей один из этих атрибутов чтобы использовать атрибут. "

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