13

ユーザーのパーミッションは、ユーザー テーブルの方が適切に表現されていますか?それとも独自のパーミッション テーブルの方が適切に表現されていますか?

ユーザー テーブルのパーミッション ユーザー テーブルにパーミッション
を配置するということは、ユーザー テーブル内のパーミッションごとに列を作成することを意味します。利点は、ユーザーをユーザー権限に関連付ける際に結合が必要ないため、クエリをより高速に実行できることです。欠点は、多くのアクセス許可列を持つと、ユーザー テーブルが乱雑になることです。

多対多の関係で User テーブルに結合された Permission テーブルのアクセス許可
このようにすると、ユーザー テーブルからアクセス許可が明確に分離されますが、ユーザー アクセス許可にアクセスするには 2 つのテーブルを結合する必要があります。データベースへのアクセスは遅くなる可能性がありますが、データベースの設計はすっきりしているように見えます。

多くの権限がある場合は、別のテーブルに権限を保持する方がよいでしょう。この決定を下す際のその他の考慮事項と、さまざまな状況でどちらの設計が優れているか?

4

2 に答える 2

28

アクセス制御の標準パターンはRole Based Securityと呼ばれます。ユーザーの数と、必要なさまざまな種類のアクセス許可の数の両方増加するにつれて、ユーザーとアクセス許可のリンクの管理がますます難しくなる可能性があります。

たとえば、5 人の管理者と 50 人のユーザーがいる場合、各グループのアクセス許可を同期するにはどうすればよいでしょうか? ユーザーの 1 人が管理者に昇格した場合、何回編集する必要がありますか? 答えは、ユーザーからロールへ、およびロールからパーミッションへという 2 つの交差を作成することです。

このソリューションは、この質問に対する私の回答で説明されています (エンティティ関係図を含む) 。

ここに画像の説明を入力

于 2012-10-27T20:10:36.003 に答える
4

最初のアプローチは、さまざまな役割/権限の数が比較的少ない場合に実行可能です。たとえば、通常のユーザーと管理者の 2 種類のユーザーしかいない場合、別のテーブルはやり過ぎのように見えます。単一is_adminの列で十分でシンプルです。

ただし、ロールの数が少数を超えると、このアプローチは拡張されません。いくつかの欠点があります。

  • ユーザーテーブルが非常に「広く」なり、空の列が多くなります (スペースの浪費)

  • システムに新しいロールを追加するには、ユーザー テーブルを変更する必要があります。これは面倒で、大規模なユーザー データベースでは時間がかかる場合があります。

  • ユーザー ロールを一覧表示するには、単純なデータベース クエリとは対照的に、すべての列を列挙する必要があります。

于 2012-10-27T18:34:44.863 に答える