SQL Server - 创建用户定义的表类型 - 创建用户没有执行权限?

时间:2013-12-17 12:57:24

标签: sql sql-server stored-procedures permissions

我不认为这是一个复制品问题 - 我已经看到其他类似问题的回答:

The EXECUTE permission is denied on the user-defined table types?

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

我的问题是 - 当我与用户创建用户定义的表类型时,为什么该用户没有执行权限?

例如,我使用用户myuser登录,使用此用户创建UDT,以及使用UDT的存储过程。使用相同的用户,然后我尝试执行该过程,但得到错误

'对象'MyUdt',数据库'MyDb',架构'dbo'上的EXECUTE权限被拒绝。'

现在,我认为既然它是创建UDT的同一个用户,那么它会自动拥有正确的权限吗?您无法使用上述帖子中建议的GRANT EXECUTE命令,因为您无权向自己授予权限。

总结 - 我希望创建一个UDT,一个使用它的过程,并且能够使用同一个用户执行它 - 为什么我无法做到这一点?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

听起来你是Ownership and User-Schema Separation in SQL Server的受害者:

  

默认情况下,当开发人员在架构中创建对象时,对象由拥有架构的安全主体拥有,而不是开发人员。

即使您已被授予创建对象的权限,但它所属的对象也是您在其中创建对象的架构的所有者(dbo架构)。了解问题所在,您可以选择其中一种可能的解决方案(例如,使用您自己的架构而不是dbo,明确转移所有权,使用code signing等。)