我正在使用Sql Server 2008并且有一个内部使用sp_executesql的proc。通过ASP.NET执行过程时,我不断收到以下错误:在proc中使用sp_executesql时出现“select permission denied”错误
在对象'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
Results: MyTable public dbo SELECT GRANT MyTable guest dbo SELECT GRANT MyTable myuser dbo SELECT GRANT MyTable NT AUTHORITY\NETWORK SERVICE dbo SELECT GRANT
正如你所看到的,我在想授予在基础表上选择了矫枉过正。我甚至重写了我的proc,以便它只在动态sql中引用MyTable。我甚至授予所有上述用户对执行程序的“执行”权限......没有运气。
上面的“myuser”是web.config中连接字符串中的用户名。
我在这里错过了什么吗?
谢谢! Dave
存储过程是否定义了“WITH EXECUTE AS”? – Aaronaught 2010-02-04 00:18:39
是的......用“我的用户”,来电者,自己,老板试了一下。还有其他我错过了吗?有趣的是,当我使用MyUser时,它会在管理工作室查询窗口中引发同样的错误(但如果没有它,则不会) – Dave 2010-02-04 00:38:11