私は Sql Server 2008 を使用しており、内部で sp_executesql を使用する proc を持っています。ASP.NET を介して proc を実行すると、次のエラーが発生し続けます。
オブジェクト 'MyTable'、データベース 'MyDatabase'、スキーマ 'dbo' に対する SELECT 権限が拒否されました。
私はこれについて多くの調査を行いましたが、ほとんどの人は、動的クエリの読み取り元のテーブルに対する選択権限を付与する必要があるという事実を指摘しています。さて、私はこれを行いましたが、まだ機能していないようです:
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
where major_id = object_id('User') and
class = 1
結果: MyTable public dbo SELECT GRANT MyTable ゲスト dbo SELECT GRANT MyTable myuser dbo SELECT GRANT MyTable NT AUTHORITY\NETWORK SERVICE dbo SELECT GRANT
ご覧のとおり、基になるテーブルで選択を許可しようとしてやり過ぎました。動的SQLでMyTableのみを参照するように、procを書き直しました。上記のすべてのユーザーに、procの「実行」権限を付与しました...うまくいきません。
上記の「myuser」は、web.config の接続文字列のユーザー名です。
ここで何か不足していますか?
ありがとう!デイブ