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

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

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

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

有什么想法吗?

编辑:为了澄清,我收到的错误是在创建存储过程时出现的

最佳答案

为了让调用者将 PROC 与表值参数一起使用,您需要(不直观地)grant execute permissionsTVP 类型上调用 PROC

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

编辑

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

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

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

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

关于sql - 需要什么权限才能使用 SQL Server 表值参数 (TVP) 作为存储过程参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679594/

相关文章:

python - 使用 Python 打开文本文件并另存为 SQL 文件

sql - 在 Postgresql 中加入最大记录

sql - SQL 中合并相邻行?

mysql - 选择多对多关系中的所有相关值

mysql - 我可以使用派生属性在同一个 sql 命令中定义另一个派生属性吗?

ruby-on-rails - 如何覆盖 has_many 关系中的查询

java - 无法使用 JDBC 连接到 Sql Server 数据库

sql - SQL Server 存储过程中的多列过滤

sql-server - 如何使 SQL 中的 AND 条件可选

sql - 关键字 'LEFT' 附近的语法不正确