我不认为这是一个复制品问题 - 我已经看到其他类似问题的回答:
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,一个使用它的过程,并且能够使用同一个用户执行它 - 为什么我无法做到这一点?我错过了什么吗?
答案 0 :(得分:1)
听起来你是Ownership and User-Schema Separation in SQL Server的受害者:
默认情况下,当开发人员在架构中创建对象时,对象由拥有架构的安全主体拥有,而不是开发人员。
即使您已被授予创建对象的权限,但它所属的对象也是您在其中创建对象的架构的所有者(dbo
架构)。了解问题所在,您可以选择其中一种可能的解决方案(例如,使用您自己的架构而不是dbo
,明确转移所有权,使用code signing等。)