私はこれについて考えすぎましたが、明らかに正しい解決策はありません。これはまさに木には木が必要な状況かもしれないので、stackoverflow の助けが必要です。
地域ベースでデータベース フィルタリングを適用しようとしています。私のシステムにはさまざまなユーザーがいて、それぞれが地域オフィスに割り当てられています。ユーザーが地域のオフィスに関連付けられているデータのみを表示できるようにしたい。
簡単に言えば、私のアプリケーションは次のとおりです。Java App -> JPA (hibernate) -> MySQL
データベースにはすべての地域のオブジェクトが含まれていますが、ユーザーが自分の地域のオブジェクトを操作できるようにしたいだけです。私はそれを行う次の方法について考えました:
1) すべてのデータベース クエリを変更して、select * from tablex where region="myregion" のように読み取るようにします。これは厄介です。JPA ではうまく機能しません。たとえば、entitymanager.find() メソッドは主キーしか受け入れません。もちろん、ネイティブに移行することもできますが、select ステートメントを 1 つ見逃すだけで、セキュリティが失われます。
2) mysql プロキシを使用して結果をフィルタリングします。ちょっとファンキーですが、mysql プロキシは生の呼び出しを見るだけで、それらをどのようにフィルタリングする必要があるか (つまり、この要求を行ったユーザーがどの地域に属しているか) を本当に知りません。わかりました、各リージョンのプロキシを開始できましたが、少し面倒になり始めました..
3) リージョンごとに個別のスキーマを使用します。ええ、簡単です。私は春を使用しているので、RoutingDataSource を使用して、正しいデータソース (スキーマごとに 1 つのデータソース) を介してリクエストをルーティングできます。もちろん、現在の問題は、地域やその他のカテゴリでフィルタリングしたいということです。おっと。
4) ACL - これについてはよくわかりません。select * from tablex; を実行した場合。アクセスできないオブジェクトを静かに除外しますか、それとも大量のアクセス例外がスローされますか?
しかし、私はこれについて考えすぎていますか?これは本当によくある問題のようです。私が愚かすぎて見ることができない簡単な解決策があるに違いありません。できるだけソースに近いものをフィルタリングしたいので、/ またはデータベースに近いものになると確信していますが、何ですか?
ネタバレではありません - リンク、キーワード、アイデア、商用/オープンソース製品の提案をいただければ幸いです!! ありがとう。