2011-12-14 3 views
6

SQL Server 2008 R2:通常、テーブルとストアドプロシージャを作成し、ユーザーにストアドプロシージャの実行権限を与えます。ユーザーがストアドプロシージャを実行できる場合、ストアドプロシージャで選択/挿入/更新ステートメントの実行を許可する必要があることをSQL Serverが推測するため、テーブルまたはビューに特定の権限を与える必要はありません。 1つのスキーマしか扱っていないのでうまくいきますが、今はテーブルが1つのスキーマにあり、ストアドプロシージャが別のスキーマにあるシナリオがあります。ユーザーがストアドプロシージャを実行すると、彼らはエラーが出る:異なるスキーマでデータを呼び出すストアドプロシージャ

Msg 229, Level 14, State 5, Procedure teststoredprocedure, Line 7 The SELECT permission was denied on the object 'testtable', database 'testdatabase', schema 'testschema'.

teststoredproceduretesttableとは別のスキーマです。ストアドプロシージャに、テーブルにユーザー固有の権限を与えることなくテーブルから選択できるようにすることは可能ですか?

+0

いずれかの回答が正しかったり役に立ったりした場合は、受け入れるか、upvoteしてください。 – Ben

答えて

2

あなたがテーブルにストアドプロシージャWITH GRANTアクセスの所有者を与える必要があります。

GRANT SELECT on testschema.testtable TO storedprocschema WITH GRANT 

これは、IFを動作するはずですし、テーブルがである場合のみ:一般的にスキーマがそのようstoredprocschema.teststoredprocedureは、それは次のようになり、テーブルにアクセスできるようにするには、スキーマと同じ名前の役割が所有している

procと同じデータベース。

  • が、他のデータベースに手順を移動する「クロスデータベースの組み合わせ所有権」

  • を有効にして、持っている:

    あなたはどちらかのできるさまざまなデータベース内のテーブルと同じ結果を達成するためにそれを呼び出す元のデータベースのshimプロシージャ次に、両方の手順のアクセス許可を管理します。

0

はい、可能です。 UserWithPermissionsは、あなたが再びCRUD操作を実行しようとしているデータベース・オブジェクトに対する必要な権限を持っている

alter procedure teststoredprocedure 
with execute as 'UserWithPermissions' 
-- rest of stored proc code 

:ここではあなたが何をしたいのです。

データベースユーザーのセキュリティコンテキストが必要な権限を持っている場合は逆に、あなたにもこれを達成するために速記を使用することができます。

with execute as self 
関連する問題