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

问题描述 投票:79回答:2

我在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的权限可以解决问题,并且存储过程可以顺利运行。

asp.net security sql-server-2008 stored-procedures user-defined-types
2个回答
171
投票

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

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO

3
投票

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

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

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF
© www.soinside.com 2019 - 2024. All rights reserved.