Почему 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).