最適な役割ベースのアクセス制御(RBAC)データベースモデル[終了]
-
06-07-2019 - |
質問
Webアプリケーションのロールベースのアクセス制御を追跡するのに最適なデータベーススキーマは何ですか?
Railsを使用していますが、GoogleによってリンクされたRBACプラグインがメンテナンスされていないように見えます(SVNへのコミットは300回のみです。最新はほぼ1年前です)。
コンセプトはゼロから実装するのに十分シンプルであるが、正しく価値があるほど複雑で重要です。
では、RBACモデルを他の人がどのように設計および実装しますか?
解決
その分野での私のかなり基本的な知識に対して、RBACの基本的なアクターは次のとおりです。
- リソース。
- 許可。
- ユーザー。
- 役割(グループなど)。
リソース <!> lt;-require-<!> gt; ( 1つまたは複数)許可。
ロール <!> lt;-は-<!> gt;のコレクションです。 ( 1つまたは複数)許可。
ユーザー <!> lt;-持つことができます-<!> gt; ( 1つまたは複数)役割。
このようなモデルのテーブルは次のとおりです。
- 許可
- 役割
- ユーザー
- role_permission
- user_role
アプリケーションのユーザーがリソースに必要なアクセス許可を構成できるようにする場合は、ここにリソースを含めることもできます。しかし、私はそれを必要としなかった。お役に立てば幸いです。
他のヒント
私はたまたま仕事中のRBACサブシステムに取り組んでいます...偶然です。
私のモデルは、権限を必要とするシステム内のさまざまなエンティティの構成要素に基づいています。それらは、表示/更新する属性または実行するアクションです。もちろん、システムにはさまざまな役割があり(ユーザーに付与できます)、全体をまとめる接着剤はアクセスルールです。特定のロール、特定の許可が必要なエンティティ、および付与された許可を接続します。アクセスルールは次のようになります。
rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission
など。読者への演習としてERDを残します;-)質問がある場合は、コメントを残してください。
ユバル= 8-)
Restful ACL Railsプラグインを使用できます。
あなたの質問に対する答えは、あなたが行きたい限り深くなると思います。ロールをグループに入れてから、グループをユーザーに関連付けることを考えただけでは十分ではありません。最終的には、特定のオブジェクト(フォーラム、ビデオなど)のユーザーに特定の許可を与える必要があります。
Yuvalの答えにもっと近いので、必要なのはプロジェクト全体のオブジェクト+アクション+ユーザーを関連付けることだけです。これを提供するには;ベースオブジェクト(エンティティ)は完全に理にかなっています。 Entityから継承するオブジェクトは、この方法でユーザー+アクションに簡単に関連付けることができます。
また、物事をシンプルにしたい場合。私の提案は次のようになります;
- rbacの制限によるオブジェクトは、ベースエンティティから派生する必要があります。
- ロールのリストが必要です。ロールのリストは、エンティティと1対1で関連付けられています。
- ユーザーとロールの関係のリストが必要です。
さらに一歩進めるには、次のこともお勧めします(自動rbacの場合)
- オブジェクトへのサービスベースのアクセスを使用しています。あれは;オブジェクトのリポジトリを作成し(db-accessを使用)、サービス関数を介してリポジトリにアクセスします。
- すべてのサービス機能の開始時にカスタム属性を使用します。これにより、その機能にアクセスするために必要な役割が定義されます。
- Userパラメーターを使用してすべてのサービス関数にアクセスします。各サービス関数は、自身を実行する前にロールチェックを実行します。リフレクションは、(カスタム属性を介して)呼び出す関数とその役割の種類を理解するのに役立ちます
- また、アプリケーションの起動時に初期化子を実行し、すべての関数(およびその属性)をチェックし、新しい必要なロールを追加したかどうかを確認します。追加したばかりの役割があり、データベースにないようであれば、データベースに作成します。
しかし、残念ながら、それは.NETでのみ利用可能です。Javaにはカスタム属性がないため、Javaではまだ利用できない可能性があります。
いくつかのコード例を考えたいのですが、それが面倒です。それでも、rbacの私のやり方について質問がある場合は、あなたはここで尋ねることができます、そして、私は確かに答えます。
ロール要件は、Restful Authenticationと非常にうまく機能し、ロールベースの認証機能を提供します。よく管理されています。
.netアプリケーションの場合、Visual Guard http://www.visual-guardのようなものを確認する必要があります。 com / を使用して、許可とロールを最初から処理する必要がなくなります。
.netの場合も、メンバーシップおよびロールプロバイダーと承認が構成で処理されます。 http://www.odetocode.com/Articles/427.aspx
>https://github.com/ThoughtWorksStudios/piece をお試しください。これはルールエンジンですユーザーロールベースのアクセス制御を管理するには:
- アクセス制御ルールを定義する
- ルールを組み合わせて新しいルールを構築する
完全なRailsアプリケーションの例は次の場所にあります。 https://github.com/xli/piece-blog
RBACの紹介-
ロールベースのアクセス制御システムは、組織のユーザーの役割に基づいて、「一部のソースまたはアプリケーションまたはアプリケーションの一部の機能」へのアクセスを制限する方法です。
ここで、制限は複数のアクセス許可によって行うことができ、アクセスを制限するために管理者によって作成されます。これらのアクセス許可はユーザーに割り当てられるロールをまとめて表します。
そして、RBACを少し深くすると、基本的に3つの機能が含まれています。
1)認証-ユーザーの身元を確認します。通常、ユーザーアカウントとパスワードまたは資格情報を介して行われます。
2)承認-ユーザーがアプリケーションでできることとできないことを定義します。例<!>#8216;注文の変更<!>#8217;許可されていますが、<!>#8216;新規注文の作成<!>#8217;許可されていません。
3)アプリケーションでのユーザーアクションの監査。 -アプリケーションでのユーザーのアクションと、誰がどのユーザーにどのアクセスを許可したかを追跡しますか?
これは、RBACシステムの非常に基本的な上面図です。
RBACシステムの基本構造には、次のコンポーネントを含めることができます。 ユーザー、ロール、権限または制限、リソース。
- 許可または制限<!>#8211;パーミッションはへのアクセスを表します application <!>#8217; sリソース。
- 役割<!>#8211;権限のコレクションが含まれています
- ユーザー<!>#8211;ユーザーに割り当てられた単一または複数のロール、したがって最終的にユーザー 役割による権限が含まれています。
これに加えて、ユーザーのコレクションを持つこともできます<!>#8211; <!>#8211と呼ばれる;複雑なシナリオをサポートする場合は、グループ、およびロールをグループに割り当てることができます。 したがって、これはRBAC構造に関する非常に基本的な情報でした。
このブログ投稿が本当に好きです: https:// content。 pivotal.io/blog/access-control-permissions-in-rails
編集:
railscastのryanbは同じ線に沿って考え、cancan https:// githubという宝石を作成したようです。 com / ryanb / cancan は、pivotllabsの投稿と同様の基本的な手法を使用しています。