私は 2 つのデータベースを持っています。それらをDatabase1とDatabase2と呼びましょう。アクセス許可が非常に限られているユーザーをUser1と呼びましょう。また、 Database1のストアド プロシージャをProc1と呼びましょう。
Proc1でUser1にEXECUTE
アクセス許可を付与します。User1にはこれらのテーブルに対する明示的な権限がありませんが、参照されているすべてのテーブル (SELECT、UPDATE ... など) がDatabase1にある限り、問題はありませんでした。GRANT EXECUTE ON [dbo].[Proc1] TO [User1]
Proc1をテーブルから SELECT するように変更しました。それをTable1と呼びましょう。Proc1を実行すると、次のエラーが表示されます。 オブジェクト 'Table1'、データベース 'Database2'、スキーマ 'dbo' で SELECT 権限が拒否されました
私の理解では、EXECUTE をストアド プロシージャに付与すると、SQL Server が必要なアクセス許可を処理します。テーブル (またはオブジェクト) が別のデータベースにある場合、動作が異なりますか?
ノート:
- User1は両方のデータベースのユーザーであり、制限付きの同じ権限を持っています
- SQL Server 2005 を使用しています