50

Web アプリケーションのロールベースのアクセス制御を追跡するのに最適なデータベース スキーマは何ですか?

私は Rails を使用していますが、Google によってリンクされた RBAC プラグインはメンテナンスされていないようです (SVN へのコミットは 300 件のみです。最新のものはほぼ 1 年前です)。

この概念は、ゼロから実装するのに十分単純ですが、正しく理解する価値があるほど複雑で重要です。

では、他の人はどのように RBAC モデルを設計し、実装しているのでしょうか?

4

10 に答える 10

73

その分野の私のかなり基本的な知識では、RBAC の基本的なアクターは次のとおりです。

  • 資力。
  • 権限。
  • ユーザー。
  • ロール (つまり、グループ)。

リソース<-require-> ( 1 つまたは複数)パーミッション

ロール<- は -> ( 1 つまたは複数の)パーミッションのコレクションです。

ユーザー<- 持つことができます -> ( 1 つまたは複数の)役割

このようなモデルのテーブルは次のようになります。

  • 許可
  • 役割
  • ユーザー
  • role_permission
  • user_role

アプリケーションのユーザーがリソースに必要なアクセス許可を構成できるようにする場合は、ここにリソースを含めることもできます。しかし、私はそれを必要としませんでした。それが役立つことを願っています。

于 2008-10-12T14:36:01.070 に答える
27

これは、 Amr Mostafa の優れた回答を説明するための簡単な図です。

ここに画像の説明を入力

于 2014-01-21T09:50:26.140 に答える
3

私はたまたまここでRBACサブシステムに取り組んでいます...なんと偶然です。

私のモデルは、表示/更新する属性や実行するアクションなど、アクセス許可を必要とするシステム内のさまざまなエンティティの構成要素に基づいています。もちろん、システムにはさまざまな役割(ユーザーに与えることができます)があり、すべてをまとめる接着剤は、特定の役割、特定の許可が必要なエンティティ、および許可を接続するアクセスルールです。承諾する。アクセスルールは次のようになります。

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

等々。読者の練習問題としてERDを残しておきます;-)質問がある場合は、コメントを残してください。

ユヴァル=8-)

于 2008-10-12T17:44:10.690 に答える
1

Restful ACL Rails プラグインを使用できます。

于 2008-10-10T08:49:54.480 に答える
1

あなたの質問への答えは、あなたが望むほど深くなると思います。ロールをグループに入れ、グループをユーザーに関連付けることを考えた場合、十分ではありません。最終的には、特定のオブジェクト (フォーラム、ビデオなど) に対する特定の権限をユーザーに付与する必要があります。

私は Yuval の答えにより近いです。必要なのは、プロジェクト全体のオブジェクト + アクション + ユーザーを関連付けることだけです。これを提供するため。基本オブジェクト (エンティティ) は完全に理にかなっています。エンティティから継承するオブジェクトは、この方法でユーザー + アクションに簡単に関連付けることができます。

また、物事をシンプルに保ちたい場合。私の提案は次のとおりです。

  • rbac の制限によるオブジェクトは、基本エンティティから派生する必要があります。
  • エンティティに 1 対 1 で関連付けられたロールのリストが必要です。
  • ユーザーと役割の間の関係のリストが必要です。

さらに一歩進めるために、次のこともお勧めします(自動化されたrbacの場合)

  • オブジェクトへのサービスベースのアクセスを使用しています。あれは; オブジェクトのリポジトリを作成し (db アクセスを実行します)、サービス関数を介してリポジトリにアクセスします。
  • すべてのサービス関数の最初にカスタム属性を使用します。これにより、その機能にアクセスするために必要な役割が定義されます。
  • User パラメーターを使用してすべてのサービス関数にアクセスし、各サービス関数はそれ自体を実行する前にロール チェックを行います。リフレクションは、呼び出す関数とその役割の種類を理解するのに役立ちます (カスタム属性を介して)
  • また、アプリケーションの起動時にイニシャライザを実行すると、すべての関数 (およびその属性) がチェックされ、新しい必要なロールが追加されたかどうかが確認されます。追加したばかりのロールがあり、データベースにないように見える場合は、データベースに作成されます。

しかし残念なことに、これは .NET でのみ利用可能です。私の知る限り、Java にはカスタム属性がないため、Java で利用できる可能性はまだありません。

いくつかのコード例を思いつきたいのですが、それを行うのが面倒です。それでも、私の rbac のやり方について質問がある場合は、ここで質問できます。必ず返信します。

于 2010-03-12T21:55:56.213 に答える
0

役割要件は、Restful認証と非常にうまく連携して、役割ベースの認証機能を提供し、適切に維持されます。

于 2008-10-12T00:03:34.810 に答える
-1

.net アプリケーションの場合は、Visual Guard http://www.visual-guard.com/などを調べて、パーミッションとロールを最初から処理する必要がないようにする必要があります。

また、.net の場合、構成で処理されるメンバーシップとロール プロバイダー、および承認があります。http://www.odetocode.com/Articles/427.aspx

于 2008-10-11T05:20:51.160 に答える
-1

このブログ投稿がとても気に入っています: https://content.pivotal.io/blog/access-control-permissions-in-rails

編集:

Railscasts の ryanb は同じ方針に沿って考え、pivollabs の投稿と同様の基本的な手法を使用してcancan https://github.com/ryanb/cancanという gem を作成したようです。

于 2009-12-21T09:09:43.153 に答える
-1

RBAC の概要 -

役割ベースのアクセス制御システムは、組織のユーザーの役割に基づいて「一部のソースまたはアプリケーション、またはアプリケーションの一部の機能」へのアクセスを制限する方法です。

ここで、制限は複数の権限によって行うことができます。それらはアクセスを制限するために管理者によって作成され、これらの権限は集合的にユーザーに割り当てられるロールを表します。

RBAC をもう少し深く掘り下げると、基本的に 3 つの機能が含まれます。

1) 認証 - ユーザーの身元を確認します。通常、これはユーザー アカウントとパスワードまたは資格情報を介して行われます。

2) 承認 - アプリケーションでユーザーができることとできないことを定義します。元。「注文の変更」は許可されていますが、「新しい注文の作成」は許可されていません。

3) アプリケーションに対するユーザー アクションの監査。- アプリケーションに対するユーザーのアクション、および誰がどのユーザーにどのアクセス権を付与したかを追跡します。

これは、RBAC システムの非常に基本的な上面図です。

RBAC システムの基本構造には、次のコンポーネントを含めることができます: ユーザー、役割、許可または制限、リソース。

  • 権限または制限 - 権限は、アプリケーションのリソースへのアクセスを表します。
  • 役割 – 権限のコレクションが含まれています
  • ユーザー – 単一または複数のロールがユーザーに割り当てられるため、最終的にユーザーはロールを介して権限を持ちます。

これに加えて、複雑なシナリオをサポートしたい場合は、グループと呼ばれるユーザーのコレクションを作成し、ロールをグループに割り当てることもできます。というわけで、これは RBAC 構造に関する非常に基本的な情報でした。

于 2015-08-03T14:08:53.613 に答える