使用SQL Server表值参数(TVP)作为存储过程参数需要什么权限?

时间:2014-05-15 13:24:15

标签: sql sql-server sql-server-2008 permissions table-valued-parameters

我正在使用SQL Server 2008 R2并且我创建了一个TVP,我想将其用作存储过程的参数,但是我收到一条消息,说它无法找到或者我没有权限

我可以在脚本中或在存储过程的主体中使用TVP,但是当我尝试将其用作参数时,我会收到错误。

有什么想法吗?

编辑:为了澄清,我得到的错误是创建存储过程

2 个答案:

答案 0 :(得分:9)

为了让调用者使用带有表值参数的PROC,您需要TVP类型的grant execute permissions {不明确地} Grant Reference here来调用{{1}即

PROC

修改

我相信我能够复制这个问题,即从授予用户的最小权限集开始。至关重要的一步是让您的TVP的DBO或Schema所有者授予您以下访问权限,以便能够在GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole] 中使用它(没有此访问权限,我能够声明一个松散的变量TVP类型,但不能在PROC中使用它。

PROC

{{3}} (显然,您还需要GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User. 权限,以及对PROC中使用的任何对象的相关访问权限)

PROC的消费者还需要根据初始答案对Proc和Type进行CREATE PROCEDURE权限。

答案 1 :(得分:0)

右键单击要授予访问权限的表值函数。从上下文菜单中获取属性。

1)点击"权限"选项卡在右侧。

2)浏览到用户名(SQL或Windows)。

3)选择该用户。

4)在底部的Explicit Permissions部分下,选择Grant for Control Permissions,单击OK。

5)单击“确定”

enter image description here