Почему PostgreSQL объединил пользователей и группы в роли?

От к документам PostgreSQL:

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

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

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

Подробнее:

CREATE USER is equivalent to CREATE ROLE except that CREATE USER предоставляет пользователю права доступа к LOGIN.

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

Ответ 1

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

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;

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

GRANT joe TO sue;

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

CREATE USER james;

Это просто роль с правами входа в систему сейчас. Или же:

CREATE GROUP workers;

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

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

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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