0

クライアントの健康記録などの機密データを管理するアプリケーションがあるとします。多くの成功を収めた後、私は多くのクライアントを引き付けました。中には有名人もいます。現在、このアプリケーションを使用している多くの従業員がいます。ただし、特権アカウントマネージャーのみが「有名人」の記録にアクセスできるようにすることで、「有名人」の身元を保護したいと考えています。

このアプリケーションのデータは、長年にわたって進化してきた関係データベースに格納されています。「clients」テーブルには、有名人の記録を示す「famous」列があります。「ユーザー」テーブルには、従業員が有名人の記録にアクセスできることを示す「特権」列があります。どちらもブール値であると仮定します。

すべてのクエリの where 句に追加して、データ層全体を略奪することができます。また、ユーザーが「特権」を持っているかどうかを示すフラグの送信を開始する必要があります。これは大規模な事業ですが、別のオプションはありますか?

一般的なアドバイスを求めていますが、私のアプリケーションは Java プラットフォームで書かれています。

更新: 役割ベースのアクセス制御と、ユーザー、グループ、役割、許可、権利など適切に正規化された方法で配置する方法についてはよく知っていますが、それは現在のオプションではありません。おそらく、Spring Security などのフレームワークを利用するために、現在のシステムをリファクタリングして適応させることになるでしょう。

4

3 に答える 3

2

ここでの一般的なケースは、さまざまなユーザーがさまざまなクライアントにアクセスする必要があるということです。私の経験では、これはロールを使用して実装するのが最適です。さまざまなユーザーにさまざまな役割を割り当てることができます。データへのアクセスはロールにマップされます。

あなたの場合、マネージャーの役​​割と従業員の役割を持っている可能性があります。マネージャーはすべてのレコードにアクセスできます。従業員は機密性の低いレコードにのみアクセスできます。この関連付けは、データベース内のテーブルを通じて管理できます。たとえば、ロール、user_role、および client_role です。user_role はユーザーを役割にマップし、client_role はどの役割がクライアント情報にアクセスできるかを定義します。

あなたが説明する「有名な」列を追加することには注意が必要です。危険なのは、将来、新しいビジネス ルールが発生したときに、このロジックを実装するために、より多くの列とデータ レイヤーの新しいコードが必要になることです。ロールを介してアクセスを管理すると、一般的なメカニズムが得られ、短期的には多少の作業が必要になる場合でも、拡張性が高くなる傾向があります。

于 2013-09-27T18:20:11.857 に答える