所有権の連鎖が原因とは思えない、ネストされたビューで面白いアクセス許可の問題に遭遇しました。言及されているサーバーはすべて SQL Server 2008 R2 です。
Bill などの特定のログインを使用するように構成されたリンク サーバーがあります。私のリモートサーバーにはビューがあります、それを呼び出しましょうViewA
、それは別のビューから選択します、それを呼び出しましょうViewB
。
私は問題なく動作するリンクサーバーを介して選択を行うことができます:
SELECT * FROM [LINKEDSERVER].[DATABASE].[SCHEMA].[VIEWA]
これは満足のいく結果セットを返します。問題ありません。
現在、同じビューからクエリを実行しようとしているストアド プロシージャがあります。同じログイン サーバーを使用していることを思い出してください。
Management StudioをEXECUTE
介してストアド プロシージャを実行ViewA
し、リンク サーバーを介してクエリを実行すると、次のようになります。
ViewB で SELECT 権限が拒否されました。
リンク サーバーが使用しているログインである Bill は、 への明示的なアクセス権を持つロールの一部ですView A
。両方のビューは同じスキーマの一部であり、すべてのオブジェクトは dbo によって所有されています。
ViewA
Bill が明示的な権利を持っているについてではなくViewB
、所有権連鎖のために Bill がどの権利を持つべきかについて不平を言っていることに注意してください。
Bill Linked Server を介して直接クエリを実行できる理由がわかりませんが、ストアド プロシージャは失敗します。
何か案は?