6

私が現在取り組んでいるシステムには、ロールベースのセキュリティが必要ですが、これは Java EE スタックで十分に対応できます。このシステムは、ビジネス ドメインの専門家がコードを作成するためのフレームワークになることを目的としています。

ただし、データの要件もありますsecurity。つまり、エンド ユーザーに表示される情報です。

これは事実上、データベース内の行 (および場合によっては列) の可視性を低下させることを意味します。

永続化のために Hibernate を使用しています。ただし、永続化の選択がビジネス ドメインの専門家に公開されないように、独自の注釈を使用しています。

@Secured行ベースのセキュリティの場合、これは、エンティティ レベルなどで注釈を追加できることを意味します。これにより、基になるテーブルに追加の列が追加され、選択が制限されますか?

列ベースのセキュリティの場合、@Securedおそらくクエリの生成を支援するか、アスペクトを使用して返された情報をフィルタリングする必要があるでしょうか?

これが休止状態のキャッシュメカニズムにもどのように影響するか知りたいですか?

他の多くの人も同じ問題を抱えていると思いますが、どうやってこれに取り組んだのだろうと思っていましたか?

とても有難い...

4

2 に答える 2

6

Hibernate には、適切に機能する可能性のあるフィルター メカニズムがあります。フィルターは、hibernate が生成するクエリを書き換えて、返される行を制限する追加の句を含めます。休止状態で列をマスク/非表示にすることは何も知りません。

データベースもこの機能をサポートしている場合があります。たとえば、Oracle には、クエリをデータベース レベルで書き換えるVirtual Private Database (VPD) があります。このソリューションには、データベースに反する外部プログラム (レポート ツールなど) にセキュリティ制限が適用されるという追加の利点があります。VPD は、制限された列を NULL でマスクすることもサポートしています。

残念ながら、上記のソリューションは、私が通常取り組んでいるタイプ プロジェクトのセキュリティ要件をサポートするのに十分ではありませんでした。通常、上記のソリューションでは簡単に表現できないある種のコンテキストがあります。たとえば、ユーザーは、自分が作成したデータ、パブリックとしてマークされたデータ、または自分が管理するプロジェクトに属しているデータを表示できます。

通常、セキュリティを強化するために必要な値を渡すクエリ/ファインダー/DAO オブジェクトを作成し、それに応じてクエリを作成します。

これが役立つことを願っています

于 2008-08-29T18:12:36.350 に答える
1

load()Hibernate フィルターを使用する場合、追加の制限がまたはメソッドによって生成された SQL ステートメントに適用されないことに注意する必要がありますget()

于 2008-09-01T11:13:42.120 に答える