【问题标题】:What permission do I need to use an SQL Server Table Valued Parameter (TVP) as a stored proc parameter?使用 SQL Server 表值参数 (TVP) 作为存储过程参数需要什么权限?
【发布时间】:2014-07-03 23:32:17
【问题描述】:

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

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

有什么想法吗?

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

【问题讨论】:

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


    【解决方案1】:

    为了让调用者使用带有表值参数的PROC,您需要(不直观地)在TVP 上为调用PROC 的人键入grant execute permissions,即

    GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole]
    

    编辑

    我相信我能够复制该问题,即从授予用户的最小权限集开始工作。至关重要的一步是让 TVP 的 DBO 或 Schema Owner 授予您对其的以下访问权限,以便能够在 PROC 中使用它(没有此访问权限,我能够声明一个松散的变量TVP 类型,但不在 PROC 中使用)。

    GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User.
    

    Grant Reference here (显然,您还需要CREATE PROCEDURE 权限,以及对 PROC 中使用的任何对象的相关访问权限)

    根据最初的答案,PROC 的使用者还需要对 Proc 和 Type 拥有 GRANT EXECUTE 权限。

    【讨论】:

    • 如果我可以在存储过程的主体中使用TVP,那是不是意味着我已经有了EXECUTE?
    • 根据您的链接,我似乎已经拥有执行权限:To declare a table variable that uses a user-defined table type, EXECUTE permission is required on that user-defined table type.
    • 正确,这是在创建存储过程
    • @JoshRusso 我相信您的 DBO 可能需要授予您 GRANT REFERENCES ON TYPE::schema.tabletype 才能在 PROC 中使用它。
    • Grant References 做到了!谢谢!
    【解决方案2】:

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

    1) 点击右侧的“权限”标签。

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

    3) 选择该用户。

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

    5) 点击确定

    【讨论】:

    • 您的屏幕截图指令#4 与图片不匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多