Table valued parameter in a stored procedure gets execute permissions denied error

arunpereira picture arunpereira · Feb 11, 2010 · Viewed 7.8k times · Source

I get the following error when calling a stored procedure that has a table valued parameter as one of the parameters

The EXECUTE permission was denied on the object 'ValidationErrors'

ValidationErrors is a TVP created with the following statement:

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

The user executing the stored procedure has execute privileges on the stored procedure. However, I still get the above error. Any ideas?

Answer

AdaTheDev picture AdaTheDev · Feb 11, 2010

I think you may also need to grant the user permissions to the type.

References for GRANTing permissions to types:
SQL 2005
SQL 2008

Update:
Re: why you have to grant permissions on the type when you have permissions on the sproc. I don't know the definitive reason, but BOL says:

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.

Update 2: To GRANT EXECUTE permissions, you'd run this in SSMS:

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