5

ユーザーがソフトウェア システム内のリソースにアクセスするための高度なアクセス制御を実行することに関心があります。私はヘルスケア IT の仕事をしていますが、若い私は、ヘルスケアにおける役割ベースのアクセス制御の複雑さを過小評価することがよくありました。ただし、この質問は、複雑な ACL 要件を持つすべての人に当てはまるはずです。

かなり長い間、php gaclは、Health IT システム内の非常に複雑な ACL 制御の問題を処理する目的で、私の頼りになるライブラリでした。しかし、私は現在、JavaScript全般とノード固有の作業を行っています。一般化可能な方法で Access Control を行うためのライブラリを npm で検索しました。

ユーザーとリソース (2 層ではなく 3 層) だけでなく、アクションの定義をサポートしたいと考えています。また、ユーザー、アクション、およびリソース グループが必要であり、暗黙のうちに ACL 継承が必要です。

スターウォーズをテーマにしたマニュアルからそのライブラリまでの古典的な例は、次のようなルールです。

  • 乗組員のすべてのメンバーは、チューイーを除いて、銃、エンジン、コックピット、およびラウンジに (訪問、構成、および使用) アクセスできます。
  • すべてのドロイドはコックピットに (アクセスして使用する) アクセスできますが、R2D2 のみがエンジンへの構成アクセスを持っています。
  • Han には、あらゆる種類のリソースへのあらゆる種類のアクセス権があります。

ここでの基本的な概念には、ユーザーのグループ (乗組員、乗客、またはドロイド) または個人 (Han と Chewie) のいずれかに適用されるルールを作成できるという概念が含まれています。 ) またはグループ化することもできるさまざまなリソース (エンジンとコックピット) へのアクセス (メンテナンス アクセス = 構成 + 修理 + 使用) のグループ (バトル ステーション = コックピット + ガン)。

これにより、比較的単純なグループベースの管理で、非常に複雑なアクセス制御ルールを構成できます。

これまでのところ、php-gacl 以外ではこのようなものは見たことがありません。私は素晴らしい JavaScript ベースの ACL プロジェクトを調べましたが、それらはすべて、包括性よりも単純さと使いやすさを宣伝しています。これは、他の典型的な php ACL ライブラリ (つまりZend ACL )にも当てはまります。

ノードの「高度な ACL」プロジェクトに取り組んでいる人はいますか? 私がどこかを探すべきであるより良いアプローチはおそらくありますか?

php-gacl には 3 つの部分があり、1 つは php ベースの管理 GUI (確かに複雑すぎる)、ルールの CRUD 用の API (これは簡単に REST インターフェイスに変換できると思います)、および非常に小さなACL チェック機能を提供するファイル。

技術的には、そのソフトウェア モデルが機能するためには、最後のタイプだけをノードに完全に移植する必要がありますか?

より深いレベルでは、この問題をうまく処理するためにどのようなアプローチが使用されているかを理解したいと思います。この問題は通常どのように解決されますか? ノード/javascript、およびおそらく特定のデータベース アプローチ (リレーショナルと非リレーショナル) の観点から、この問題を効果的に議論する人にとってはボーナス ポイントです。私は、この正しい/間違いを行うための理論的根拠がたくさんあることを理解しています (つまり、RBAC と ACL について多くの意見があります)。私が欲しいのは、ライブラリの観点からまだ「機能する」、理論的に堅実な、またはほぼ堅実なものです。私は Javascript に焦点を当てていますが、他の言語が実際にこの問題をどのように解決しているかを理解したいと思います。

4

1 に答える 1

3

あらゆる種類の ACL の使用を避けることができれば、通常はより良い結果が得られます。それらは管理が複雑です。次の 3 つのレベルのセキュリティ チェックをモデル化することをお勧めします。

  1. URL/IP アドレス/またはその他のアクセスポイントのセキュリティ チェック
  2. リソース チェック時のメソッド。変更または操作するエンティティが何であれ、それにアクセス許可チェックを配置します。アクセスの IE ビジネス ルール タイプ。
  3. エンティティ リソース チェック。ユーザー/API/OAuth トークンがエンティティにまったくアクセスできない場合

これは、RBAC を使用して実現できます。組織/サイトのそれぞれの役割には、一連のアクセス/変更/操作権限が割り当てられます。ユーザーには役割が割り当てられますが、3 つのレベルのチェックでは役割ではなく権限がチェックされます。

Spring Security と RBAC を Google 検索として見て、それをモデルにします。ここに私が有用だと思ったいくつかのリンクがあります:

http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

(Spring Security のすべての「プリミティブ」な例とクレイジーな名前のチェックがあるため、別の名前の使用と Spring パーミッションの「hasRole()」チェックの使用を提供する記事を読むことをお勧めします。次の記事では、これについて説明します。 RBAC の設計)

http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

(RBAC を含む Spring Security の柔軟な使用に関する優れたプレゼンテーション)

http://www.infoq.com/presentations/Spring-Security-3

(以下は、RBAC の問題と解決策の適切な説明であり、PHP 用に設計されています)

http://www.tonymarston.net/php-mysql/role-based-access-control.html

RBAC 実装を備えた PHP フレームワーク:

http://trac.symfony-project.org/wiki/UserRbac

最後に、Spring Security のクラス図です。保護されているエンティティに対してセキュリティ情報を PARALLEL テーブルに入れることができることに気付くでしょう。これは設計によるものであり、Spring Security を後で追加したり、削除したり、簡単に置き換えたりすることができます。しかし、それはまた、より多くのテーブルを意味します。

http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295

于 2013-01-01T09:08:39.763 に答える