2009-07-13 18 views
2

私は現在、次回にマルチユーザーアクセスに向かう予定の小規模ビジネスデータベースアプリケーションを開発中です。行単位でデータベースアクセス制御を実装する方法

データベースには、主に、追加の情報を含む2つの結合テーブルを含むプロジェクト(プロジェクトテーブル内)が含まれています。

マルチユーザー操作に関するお客様の要件は、主にプロジェクトレベルに基づいた細かいアクセス制御(ユーザーは一部のプロジェクトにのみアクセスできる)です。私はこれを実装する方法が不思議です。

状況を少し難しくするのは、データベースアクセスが主に、(nhibernateに似ている)必要なSQLクエリを構築する自己開発の永続性レイヤーで起こることです。

唯一の解決策は、アクセスチェックを実装するデータベース内にストアドプロシージャ(または読み取りアクセス用のビュー)を実装することです。永続化レイヤーは現在、テーブルへのフルアクセスに依存しているため、各ビューに対して1つの挿入ビューと1つの削除コマンドを実装し、(INSERT/DELETEクエリを作成する代わりに)これらのコマンドを使用するために、 。

私たちのコードを変更する必要がない他のソリューションがあります場合、私は思ったんだけど...

答えて

1

この種のものは、権利を取得するために挑戦することができます。とりわけ、このような要件は、パッケージ化されたシステムの上に構築する理由です。まだ書いていないバグが修正されています。

あなた自身で行う必要がある場合は、セキュリティアスペクトの取得に集中し、後でコードを変更することについて心配することをおすすめします。あなたのコードを変更したくないので、セキュリティを妥協したくないでしょう。

追加の情報をストアドプロシージャに渡すことができます。 SQL Serverのバージョンに応じて、これはXMLの一部、またはテーブル値のパラメータになります。これには、ユーザーが必要とするアクセスを決定するために必要なすべての情報が含まれます。おそらく単なるユーザーIDですが、誰が知っていますか?

アクセスに基づいて返される行のセットをフィルタリングするために、この情報を使用するビューおよび/またはテーブル値関数を作成したいとします。

1

簡単な(ただし粗い)アプローチの1つは、WITH CHECK OPTIONを使用してユーザーグループごとにVIEWを作成することです。また、INSERT,UPDATE、およびDELETE操作でより複雑なロジックを許可するには、VIEWにはINSTEAD OFトリガーが必要です。

関連する問題