.net – 存储过程中的表值参数获取执行权限被拒绝的错误

当调用具有表值参数的存储过程作为参数之一时,我收到以下错误

对象“验证错误”拒绝EXECUTE权限

验证错误是通过以下语句创建的TVP:

CREATE TYPE [dbo].[ValidationErrors] AS TABLE(
    [ErrorMessage] [varchar](255) NOT NULL
)

执行存储过程的用户对存储过程具有执行权限。但是,我仍然收到以上错误。
有任何想法吗?

最佳答案
我想您可能还需要向用户授予该类型的权限。

GRANT对类型的权限的引用:
SQL 2005
SQL 2008

更新:
Re:为什么当您拥有sproc权限时,您必须为类型授予权限。
我不知道明确的理由,但BOL说:

Unlike user-defined types created by
using sp_addtype, the public database
role is not automatically granted
REFERENCES permission on types that
are created by using CREATE TYPE. This
permission must be granted separately.

更新2:
要授予执行权限,您可以在SSMS中运行此权限:

GRANT EXECUTE ON TYPE::dbo.ValidationErrors TO SomeUser;

转载注明原文:.net – 存储过程中的表值参数获取执行权限被拒绝的错误 - 代码日志