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
許可タイプがないのはなぜですか(Control
、References
、Take Ownership
、View Definition
)?
また、プロパティウィンドウでControl
にアクセス許可を設定すると問題が解決し、ストアドプロシージャが問題なく実行されることもわかりません。
質問がほぼ4か月前のものであることを見て、今までにこれを解決したことを本当に願っていますが、そうでない場合は、ここに答えがあると思います。
GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
ストアドプロシージャが動的SQLを使用している場合、つまり@sql
が生成されてからexec @sql
を介して実行される場合、基礎となるテーブルに許可を与える必要があります。
回避策の1つは、 別のユーザーとして実行するストアドプロシージャに変更する です。 SELFとして実行する場合、ストアドプロシージャの作成者の下で実行されます。これは非常に危険です。それでも、他のオプションがない場合:
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF