web-dev-qa-db-ja.com

EXECUTE権限は、ユーザー定義のテーブルタイプで拒否されますか?

SQL Server 2008の ser-Defined Table Types について質問があります。

ASP.NETアプリケーションの1つが必要なため、SQL Server 2008で独自のテーブルタイプを定義してストアドプロシージャのパラメーターとして使用します(ASP.NETアプリケーションでsqlコマンドを実行する場合、ストアドプロシージャのパラメーターとしてDataTableオブジェクトを渡します) 例についてはこちらを参照

問題は、ASP.NETからSqlコマンド(ストアドプロシージャの実行)を実行すると、エラーが発生することです。

オブジェクト「ourTableType」、データベース「ourDatabase」、スキーマ「ourSchema」に対するEXECUTE権限が拒否されました。

どうしてこんなことに?ユーザー定義のテーブルタイプにアクセス許可を設定する必要があるのはなぜですか?なぜそれを使用するストアドプロシージャにアクセス許可を設定するだけでは不十分なのですか?そして、何があっても設定する必要がある場合、プロパティウィンドウに設定するEXECUTE許可タイプがないのはなぜですか(ControlReferencesTake OwnershipView Definition)?

また、プロパティウィンドウでControlにアクセス許可を設定すると問題が解決し、ストアドプロシージャが問題なく実行されることもわかりません。

81
Janez

質問がほぼ4か月前のものであることを見て、今までにこれを解決したことを本当に願っていますが、そうでない場合は、ここに答えがあると思います。

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
179
mccow002

ストアドプロシージャが動的SQLを使用している場合、つまり@sqlが生成されてからexec @sqlを介して実行される場合、基礎となるテーブルに許可を与える必要があります。

回避策の1つは、 別のユーザーとして実行するストアドプロシージャに変更する です。 SELFとして実行する場合、ストアドプロシージャの作成者の下で実行されます。これは非常に危険です。それでも、他のオプションがない場合:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF
3
rkw