用户定义的表类型是否拒绝EXECUTE权限?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户定义的表类型是否拒绝EXECUTE权限?相关的知识,希望对你有一定的参考价值。

我在SQL Server 2008中有关于User-Defined Table Types的问题。

为了满足ASP.NET应用程序之一的需要,我们在SQL Server 2008上定义了自己的表类型,并将它们用作存储过程中的参数(在ASP.NET应用程序中执行sql命令时,我们将DataTable对象作为存储过程的参数传递see here for an example

问题是当我们从ASP.NET运行Sql命令(执行存储过程)时,我们收到一个错误:

对象'ourTableType',数据库'ourDatabase',架构'ourSchema'拒绝EXECUTE权限。

为什么会这样?为什么我们需要为用户定义的表类型设置权限?为什么仅仅对使用它的存储过程设置权限是不够的?如果我们不得不设置它,为什么没有任何EXECUTE权限类型在属性窗口中设置(我只能看到ControlReferencesTake OwnershipView Definition)?

我还不明白的是,在属性窗口中设置Control的权限可以解决问题,并且存储过程可以顺利运行。

答案

我真的希望你现在已经解决了这个问题,因为这个问题差不多已经有4个月了,但如果你还没有,那么我认为这就是答案。

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
另一答案

如果您的存储过程使用动态sql,意味着生成@sql然后通过exec @sql执行,则需要在基础表上授予权限。

一个解决方法是modify to stored procedure to run as a different user。如果你让它作为SELF运行,它将在存储过程的创建者下运行,这是非常危险的。如果你没有其他选择:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF

以上是关于用户定义的表类型是否拒绝EXECUTE权限?的主要内容,如果未能解决你的问题,请参考以下文章

拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限

用户自己的架构的表上的SELECT权限被拒绝

“拒绝了对对象数据库的 EXECUTE 权限”之解决

Jenkins Build Execute Shell - 文件权限被拒绝

拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE权限

Security5:Execute AS 和 impersonate 权限