アクセス制御システムの作成を計画しています。教育機関を念頭に置いて、メインゲート、ゾーン、建物、レベル、セクション、部屋などの境界テーブルを作成しました(各テーブルには外部キー関係があります).....今度は部門テーブルと従業員テーブルを作成しますが、どのように特定の境界に部門を定義できますか?ユーザーとして、部門は部屋または建物全体である可能性があるためです。すべての境界テーブルの外部キーを部門テーブルに与えることは、私が推測する適切な方法ではありません。また、ユーザーが別のポイントからチェックポイントにアクセスした場合に、アクセスをパスに入れて、許可したくない場合もあります。私はデータベース設計の初心者です。私が思いもよらなかった簡単な方法があるかもしれません。上記を作成するための最適な設計のアイデアを手伝ってください。前もって感謝します..
1 に答える
安全な場所の階層を作成するポイントは、誰がどの場所にアクセスできるかを管理することであるため、複雑な外部キー(自己参照関係)を使用して 、これらすべての場所を1つのテーブルで管理することをお勧めします。
次のERDを検討してください。
ここには、他のセキュリティゾーンを含めることができるセキュリティゾーンがあります。人々は適切なゾーンへのアクセスを許可されます。下位レベルのゾーンへのアクセスは、下位レベルのゾーンを含むすべてのゾーンへのアクセスを意味します。
複雑な外部キーを使用することは、階層データを処理する必要があることを意味します。これは、SQLでは厄介な場合があります。階層ナビゲーションを容易にするために、この質問への回答で詳細に説明した訪問番号を使用することをお勧めします。
あらゆる種類のアクセス制御システムで考慮すべきことの1つは、セキュリティ管理者が維持するデータの量を最小限に抑えることです。多くの人が同じアクセスルールを持っています。このため、上記のERDを拡張して、個人ではないグループにゾーンへのアクセスを許可し、個人にグループへのアクセスを許可する役割ベースのセキュリティを使用することをお勧めします。ロールベースのセキュリティの詳細については、dba.seでこの質問に対する私の回答を参照してください。役立つ場合は、役割ベースのアクセスルールと個別のアクセスルールを組み合わせて使用できます。
考慮すべきもう1つのオプションは、ACCESSテーブルに許可フラグと禁止フラグの両方を含めることができるということです。これらは、より大きなエリアへのアクセスを許可する一方で、その中に含まれるより小さなエリアへのアクセスを特に禁止するために使用できます。このアプローチにより、個人ごとに管理する必要のあるデータの量を減らすことができます。