zerosant memo

zerosantのメモ帳

最終更新日: 2021.08.16
公開日: 2021.04.23

DAC と RBAC 認可周りのテーブル設計

認可周りを表現するための設計。「ユーザー」と「許可」の二つの概念をテーブル設計に落とし込む。

DAC

Discretionaly Access Controll: 任意アクセス制御。「ユーザー」と「許可」をそれぞれのテーブルusers, permissionsとし、誰がどの許可を持っているかを関連テーブルで管理する。

dac

  • Pros
    • 許可の種類が増えてもテーブル構成が変わらない
  • Cons
    • 複数の同じ許可をもつユーザーを作成するとき、毎回設定する必要がある。
      • 例)10種類の許可を持つユーザーを2人作成するとき、user_permissionsにレコードが20行必要。

RBAC

Roll Based Access Controll: ロールベースアクセス制御。「ユーザー」と「許可」意外に、「役割」という概念も加える(roleテーブル)。許可:役割の関連テーブルと、ユーザー:役割の関連テーブルを作る。

rbac

  • Pros
    • 同じ許可の組み合わせを持つユーザーを作成するとき、user_rolesに1行追加するだけでいい。
    • ある役割の許可の組み合わせを変更したいとき、role_permissionsを変更するだけで、その役割のすべてのユーザーに変更を反映することができる。
  • Cons
    • 役割に対して一意に許可を付与するため、動的に許可を付与することができない。
    • 複雑な許可の組み合わせを作る要件がでてくると、その都度新しい役割が増えていく。