1

私は、PHP と MySQL を使用して Web アプリケーションを作成するチームの一員です。アプリケーションには、異なる役割を持つ複数のユーザーがいます。このアプリケーションは、地理的に分散した方法でも使用されます。

したがって、特定のデータベース レコードに対するユーザー権限を制御するアクセス制御システムを作成する必要があります。つまり、特定のレコードのみが表示されるようにデータベース クエリを変更します。たとえば、都市レベルのユーザーの場合、ユーザーの特定の都市に関連するレコードのみを表示する必要がありますが、全国レベルのユーザーの場合、国のすべての都市のレコードを表示する必要があります。

SQL クエリで情報をハードコーディングせずに、この種の情報検索を処理できるシステムの設計について助けが必要です。

どんな助けでも大歓迎です。

前もって感謝します

4

2 に答える 2

3

アプリケーションの設計は、必要なセキュリティニーズに基づいて異なります。

たとえば、情報は複数のデータベースに保存されていますか、それとも単一のデータベースに保存されていますか?各タイプのユーザーに、特定の権限を表すデータベースのスキーマを提示することが重要ですか?明らかに、これらの質問に対する答えは、データベースアクセスのためにより安全なシステムが必要かどうかを示唆しています。

その場合は、システムに存在するユーザーのタイプごとにデータベースユーザーを作成します。各ユーザーに、適切なテーブル、ビュー、プロシージャなどへのアクセス許可を付与します。ユーザーがシステムに対して認証を行う場合、そのユーザーのユーザータイプに基づいて条件付きデータベース接続を作成する必要があります。

さらに極端な場合は、ストアドプロシージャを介してデータベースへのアクセスを厳密に制御することも適切です。その場合、各データベースユーザーは、必要なストアドプロシージャのセットにのみアクセスできます。

データベースにセキュリティを実装することは苦痛であり、アプリケーションの複雑さとそれを維持するためのコストを増加させ、アプリケーションIMOの全体的な結束を低下させますが、ハッキングやその他の方法でセキュリティの壁を非常に厳しくします。システムを悪用します。

セキュリティの目的でデータベース内に何を実装するかに関係なく、現在認証されているユーザーとそのタイプを格納するためにセッションメカニズムを使用する必要があることも明らかです。特定のユーザーの機能を変更する簡単な方法は、各ユーザーの使用可能なアクション(関数またはメソッドの読み取り)とその属性(またはプロパティ)をクラス内にカプセル化して、特定のユーザーを表すことです。そうすれば、2人がDashboard.phpにアクセスした場合、アクセスできるデータが正確に表示されます。

最後に、データベースに保存されているユーザーに関する情報(情報を表示する必要のある都市や監督しているユーザーなど)を使用して、一部のアクセス制御を制御できます(おそらく制御する必要があります)。次に、その情報を使用して、ユーザー固有のドメインオブジェクトからアクセスできるオブジェクトのコレクションを作成します。

于 2009-01-23T23:14:18.443 に答える
1

ユーザーはデータベース エンジンに直接アクセスできますか? できれば避けてください。

アプリケーション全体が必要とするアクセス許可だけを提供する専用のユーザー アカウントを使用して、アプリケーションをデータベースに接続します。アプリケーション定義のユーザーとロール、および単純なカスタム API に基づいて、残りのセキュリティをアプリケーション内で実行します。

これらのユーザーが複数のそのようなアプリケーションにアクセスして使用する必要がある場合は、ユーザーを別の共有データベースに格納し、アプリケーションが共有カスタム API を使用して参照するようにすることを検討してください。

于 2009-01-23T20:19:58.733 に答える