EXECUTE权限在用户定义的表types上被拒绝?
我有一个关于SQL Server 2008中的用户定义表types的问题。
对于需要其中一个ASP.NET应用程序,我们在SQL Server 2008上定义了我们自己的表types,将它们用作存储过程中的参数(当在ASP.NET应用程序中执行sql命令时,我们将DataTable对象作为parameter passing给存储过程看这里的例子 )
问题是,当我们从ASP.NET运行Sql命令(执行存储过程)时,我们得到一个错误:
EXECUTE权限在对象“ourTableType”,数据库“ourDatabase”,模式“ourSchema”上被拒绝。
为什么? 为什么我们需要为用户定义的表types设置权限? 为什么仅仅在使用它的存储过程上设置权限是不够的? 如果我们必须设置它,为什么没有EXECUTE
权限types设置属性窗口什么(我只能看到Control
, References
,取得Take Ownership
, View Definition
)?
我也不明白的是,在属性窗口中设置权限Control
解决了问题,存储过程运行没有问题。
我真的希望你现在已经解决了这个问题,因为这个问题已经快4个月了,但如果你还没有这个问题的话,我想这就是答案。
GRANT EXEC ON TYPE::[schema].[typename] TO [User] GO
如果您的存储过程使用dynamicsql,即生成@sql,然后通过exec @sql
执行,则需要在基础表上授予权限。
一个解决方法是修改为存储过程以不同的用户身份运行 。 如果以SELF模式运行,它将运行在存储过程的创build者之下,这非常危险。 不过,如果你没有别的select:
CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS SELF