0

データベースのやり取りを保護するために、ストアド プロシージャのみを実行できる制限付きユーザーを作成しました。彼には、テーブルを照会する権限がありません。

このシナリオは非常にうまく実装できました!. 問題は、ストアド プロシージャの 1 つに動的 SQL 実行が含まれており、テーブル X で SELECT クエリを実行する権限がないと言って実行に失敗することです。

これを回避するには、ユーザーに対してではなく、そのようなプロシージャに明示的な SELECT 権限を付与する必要があります。

私を助けてください!

4

5 に答える 5

2

MNagel にはこれに対する正しいリンクがありますが、繰り返しますが、次のようなものを使用して確認する必要があります。

CREATE PROC dbo.MyProc
WITH EXECUTE AS 'SomeUser'
AS
BEGIN --Proc
 --Do Stuff
END --Proc
GO

「Execute As」には、途中でいくつかの落とし穴があります。他のユーザーが指定されたユーザーになりすますことを許可する必要があり、そのユーザーには、基になるテーブルに対する適切な選択権限が必要です。

アクセス許可をまとめて付与する場合は、オブジェクト レベルではなくスキーマ レベルで行うことができます。たとえば、次のようになります。

GRANT SELECT, EXEC ON Schema::dbo TO MyRole;

私はこれを以前に使用して、ロールの多くの付与ステートメントを大幅に簡素化しました。より一般的なロールのオーバーライドはほとんどないため、これはかなり役立ちます。

于 2013-07-05T23:31:10.480 に答える
0

テーブル X で SELECT クエリを実行する権限がないことについて sql が不平を言っている SP で、その特定の SP とテーブルの所有権の連鎖が壊れていますか?

于 2013-07-08T01:46:26.970 に答える
0

適切な権限を持つユーザーとして実行されるストアド プロシージャを定義します。

http://msdn.microsoft.com/en-us/library/ms188354.aspx

于 2013-07-05T12:28:34.133 に答える