アプリケーションの役割を持つデータベースがあります。ロール メンバーはすべて、Active Directory のグループに属しています。テーブルから選択する権限をロールに与える代わりに、呼び出す必要があるすべてのストアド プロシージャに対する実行権限をロールに与えました。
これは、動的 SQL を構築して sp_executesql を呼び出すストアド プロシージャの 1 つを除いて、正常に機能します。
動的 SQL は次のようになります。
SET @SQL = N'
SELECT *
FROM dbo.uvView1
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'
EXEC sp_executesql @SQL
このロールのユーザーは、ストアド プロシージャの呼び出しに失敗しています。次のようなエラーが発生しますが、これは予想されることです。
オブジェクト 'uvView1'、データベース 'Foobar'、スキーマ 'dbo' に対する SELECT 権限が拒否されました。
動的 SQL のすべてのビューにロール権限を付与せずに、ユーザーにこのプロシージャを正常に実行させる方法はありますか?