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设置属性窗口什么(我只能看到ControlReferences ,取得Take OwnershipView 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