[dbo] スキーマのストアド プロシージャを使用して、あるスキーマの1つのテーブルからデータを選択し、ユーザーが 1 つのデータベース ロールを介してアクセスし、別のスキーマの同様の名前のテーブルからデータを選択できるかどうか、アドバイスをお願いします。別のデータベース ロールを介してアクセスするユーザーの場合は?
たとえば、データベースに 3 つのスキーマがあるとします。
- dbo
- 緑
- 赤
[ RedLogin ] と [ GreenLogin ]の 2 つのデータベース ログインがあります。これらは、それぞれのデータベース ユーザー [ RedUser ] と [ GreenUser ] を使用してデータベースに接続します。これらのユーザーは、それぞれのデータベース ロール [ RedRole ] および [ GreenRole ] のメンバーです。
- [ RedUser ] のデフォルト スキーマは [ red ] です。
- [ GreenUser ] のデフォルト スキーマは [ green ] です。
- [ RedRole ] は [ dbo ]に対する実行権限と[ red ] スキーマに対する選択権限を持っています。
- [ GreenRole ] は [ dbo ]に対する実行権限と[ green ] スキーマに対する選択権限を持っています。
- [ green ] スキーマには、[ User ]というテーブルがあります。
- [ red ] スキーマには [ User ]というテーブルがあります。
[ dbo ] スキーマには、実行される [ User_GetAll ] というストアド プロシージャがあります。
SELECT * FROM USER;
私が欲しいのは:
- [ Redlogin ]でログインし、[ User_GetAll ] を呼び出すユーザーは、[ red ].[ User ] テーブルからすべてのユーザーを取得します。
- [ Greenlogin ]でログインし、[ User_GetAll ] を呼び出すユーザーは、[ green ].[ User ] テーブルからすべてのユーザーを取得します。
これは可能ですか?もしそうなら、それを達成するための最良の方法は何ですか? ありがとうございました。
注意:上記のシナリオは、私が達成しようとしていることを理解するためのものです。実際のプロジェクトには、ソリューションを適用する必要がある多くのテーブルとストアド プロシージャがあります。