Почему PostgreSQL объединяет пользователей и группы в роли? - PullRequest
23 голосов
/ 13 декабря 2011

С Документация PostgreSQL :

Понятие ролей объединяет понятия «пользователи» и «группы». В Версии PostgreSQL до 8.1, пользователи и группы были разных видов сущностей, но теперь есть только роли. Любая роль может действовать как пользователь, группа или оба.

Почему они сделали это изменение в 8.1?

Возможно, это проще с точки зрения программистов C, с одним классом Role (struct)?

Подробнее :

CREATE USER is equivalent to CREATE ROLE except that CREATE USER дает разрешение на вход для пользователя / роли .

(Я собираюсь разработать систему разрешений для моего веб-приложения, поэтому я заинтересован в этом.)

Ответы [ 4 ]

27 голосов
/ 13 декабря 2011

Слияние имеет много преимуществ и не имеет недостатков. Например, теперь вы можете плавно преобразовать «пользователя» в «группу» и наоборот, добавив / удалив привилегию LOGIN.

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;

Или вы можете GRANT членство в любой другой роли ("пользователь") или не входящей в систему роли ("группа") для роли:

GRANT joe TO sue;

Вы все еще можете:

CREATE USER james;

Теперь это просто роль с привилегией входа . Или:

CREATE GROUP workers;

Это эффективно то же самое, что CREATE ROLE сейчас.

В руководстве есть все.

5 голосов
/ 14 декабря 2011

Я нашел эту ветку в списке PostgreSQL-хакеров от 6 июня 2003 года, которая в конце концов предлагает объединить пользователей, группы и роли. (Спасибо Крейгу Рингеру за предложение проверить архивы списка pgsql-хакеров.)

Вот некоторые упомянутые преимущества (те, которые я нашел).

разрешить группам иметь группы в качестве членов

код ACL будет упрощен

Синтаксис GRANT / REVOKE и формат отображения списков ACL могут быть упрощенный, поскольку не было бы необходимости в синтаксическом маркере для является ли данное имя пользователем или группой.

В некоторых обстоятельствах я вижу, что имеет смысл разрешить вход в систему непосредственно как группа / роль / whatchacallit

Это также решило бы проблему, которую будут просматривать представления information_schema показывать только находящиеся в собственности объекты

[облегчает] представление привилегий, предоставленных группам [с Вы бы просто повторно использовали код, связанный с ролью?]

3 голосов
/ 13 декабря 2011

Различие между пользователями и группами ничего не дает.

AFAIK мотивация для его изменения заключалась в том, чтобы упростить использование, например:

  • Один пользователь маскируется под другого, например, суперпользователь, имитирующий пользователя с ограниченными правами.С объединенными ролями это становится просто очередным изменением текущей роли, ничем не отличающимся от изменения основной группы.

  • Группы, являющиеся членами других групп для реализации гранулярных разрешений доступа.

Если вам нужны подробности, лучше всего проверить архивы списка pgsql-хакеров за период и историю мерзавцев (преобразованную из CVS).

3 голосов
/ 13 декабря 2011

Из руководства :

Стандарт SQL определяет понятия пользователей и ролей, но рассматривает их как отдельные понятия и оставляет все команды, определяющие пользователей, указаннымикаждая реализация базы данных.В PostgreSQL мы решили объединить пользователей и роли в единый вид сущностей.Поэтому роли имеют гораздо больше необязательных атрибутов, чем в стандарте.

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