23

PostgreSQLのドキュメントから:

ロールの概念には、「ユーザー」と「グループ」の概念が含まれています。8.1 より前のバージョンの PostgreSQL では、ユーザーとグループは異なる種類のエンティティでしたが、現在はロールのみです。どのロールも、ユーザー、グループ、またはその両方として機能できます。

なぜ彼らは 8.1 でこの変更を行ったのですか?

おそらく、C コーダーの観点からすると、単一の Role クラス (構造体) を使用する方が簡単でしょうか?

詳細

CREATE USER is equivalent to CREATE ROLE except that CREATE USER user/role に LOGIN パーミッションを付与します

(私は自分の webapp の許可システムを設計しようとしているので、これに興味があります。)

4

4 に答える 4

28

マージには多くの利点があり、欠点はありません。たとえば、LOGIN権限を追加/削除することで、「ユーザー」を「グループ」に、またはその逆にシームレスに変換できるようになりました。

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;

または、他のログイン (「ユーザー」) または非ログイン ロール (「グループ」) のメンバーシップをロールに付与できます

GRANT joe TO sue;

あなたはまだすることができます:

CREATE USER james;

これは、ログイン権限を持つロールにすぎません。または:

CREATE GROUP workers;

それは事実上、現在と同じCREATE ROLEです。

マニュアルにはすべてがあります。

于 2011-12-13T10:49:17.450 に答える
5

このスレッドは、2003年6月6日からのPostgreSQL-Hackersリストで見つかりました。これは、最終的に、ユーザー、グループ、およびロールが統合されることを示唆しています。(pgsql-hackersリストのアーカイブをチェックすることを提案してくれたCraig Ringerに感謝します。)

ここに言及されたいくつかの利点があります(私が見つけたもの)。

グループがメンバーとしてグループを持つことを許可する

ACLコードは簡略化されます

指定された名前がユーザーであるかグループであるかを示す構文マーカーが必要ないため、GRANT/REVOKE構文とACLリストの表示形式を簡略化できます。

状況によっては、グループ/ロール/whatchacallitとして直接ログインできるようにすることが理にかなっていることがわかりました。

これにより、information_schemaビューに所有オブジェクトのみが表示されるという問題も解決されます。

[簡単に]グループに付与された特権を表す[ロール関連のコードを再利用するだけなので?]

于 2011-12-14T04:28:51.893 に答える
3

ユーザーとグループを区別しても、何も得られません。

私の知る限り、それを変更する動機は、次のような使用を簡素化することでした。

  • 1 人のユーザーが別のユーザーになりすます。統合された役割では、これは現在の役割の別の変更にすぎず、プライマリ グループの変更と同じです。

  • きめ細かなアクセス許可を実装するための、他のグループのメンバーであるグループ。

ただし、詳細が必要な場合は、その期間の pgsql-hackers リストのアーカイブと git 履歴 (CVS から変換) を確認することをお勧めします。

于 2011-12-13T14:25:59.363 に答える
3

マニュアルから:

SQL 標準はユーザーとロールの概念を定義しますが、それらを別個の概念と見なし、ユーザーを定義するすべてのコマンドを各データベース実装で指定する必要があります。PostgreSQL では、ユーザーとロールを単一の種類のエンティティに統合することを選択しました。したがって、ロールには、標準よりも多くのオプションの属性があります。

于 2011-12-13T08:17:19.637 に答える