ユーザー定義のテーブルタイプでEXECUTE権限が拒否されましたか?


87

SQL Server2008のユーザー定義テーブルタイプについて質問があります。

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

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

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

どうしてこんなことに?ユーザー定義のテーブルタイプに権限を設定する必要があるのはなぜですか?それを使用するストアドプロシージャだけに権限を設定するだけでは不十分なのはなぜですか?そして、私たちは、なぜ何もありませんどのように関係なく、それを設定する必要がある場合はEXECUTEプロパティウィンドウの何で設定するアクセス権の種類は、(私は見ることができControlReferencesTake OwnershipView Definition)?

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



ありがとうございました!私は検索しましたが、明らかに十分ではありません:/
Janez 2011

AS dbo最後に入れてみてください。このように:GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo。私のために働いた。
ジョナサン

回答:


197

質問は4か月近く前のものであるため、これまでに解決したことを心から願っていますが、解決していない場合は、次のように答えると思います。

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

9
私の2セント:接続認証メカニズムによっては、パブリックグループにexecを付与する必要がある場合があります。したがって、付与は次のようになります
。GRANTEXEC

@dotnetguyどうもありがとうございました、あなた以外の解決策は私にはうまくいきませんでした。
Mazen el Senih 2018

3

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

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

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF

1
これを指摘してくれてありがとう。ただし、ストアドプロシージャには、動的SQLが含まれていません。INSERT INTOこのユーザーが必要なすべての権限を持っている一般的な「UPDATE」テーブルステートメントのみ。また、このユーザー/ログインは、このASP.NETアプリケーションがこのデータベースに接続し、ストアドプロシージャのみを実行できるように特別に予約/作成されています(作成などではなく、作成者は常に'sa')。
Janez 2011

おかげで、それは私にとって問題でした。この問題を抱えている他の読者は、動的SQL使用したスト​​アドプロシージャのSQLServerアクセス​​許可でその他のヒントを参照できます。
ニコライ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.