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

SQL Server-创建用户定义的表类型-创建用户没有执行权限?,sql,sql-server,stored-procedures,permissions,Sql,Sql Server,Stored Procedures,Permissions,我不认为这是一个重复的问题——我在这里看到了对类似问题的其他回答: 我的问题是-当我与一个用户创建一个用户定义的表类型时,为什么该用户没有对其执行权限 例如,我使用用户myuser登录,使用该用户创建一个UDT,以及一个使用UDT的存储过程。对于同一个用户,我尝试执行该过程,但得到了错误 '对对象'MyUdt',数据库'MyDb',架构'dbo'的执行权限被拒绝。' 现在,我假设,因为创建UDT的是同一个用户,所以它会自动拥有对UDT的正确权限?您不能使用上面文章中建议的GRANT EXEC

我不认为这是一个重复的问题——我在这里看到了对类似问题的其他回答:

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

例如,我使用用户myuser登录,使用该用户创建一个UDT,以及一个使用UDT的存储过程。对于同一个用户,我尝试执行该过程,但得到了错误

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

现在,我假设,因为创建UDT的是同一个用户,所以它会自动拥有对UDT的正确权限?您不能使用上面文章中建议的GRANT EXECUTE命令,因为您不能向自己授予权限


总之,我希望创建一个UDT,一个使用UDT的过程,并且能够使用同一个用户执行所有UDT-为什么我不能这样做?我遗漏了什么吗?

听起来你是以下行为的受害者:

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


即使您已被授予创建对象的权限,但它所属的对象仍属于您在其中创建对象的模式(
dbo
schema)的所有者。知道问题所在后,您可以选择几种可能的解决方案之一(例如,使用您自己的模式,而不是
dbo
,明确地转移所有权,使用等等)。

感谢您快速而有用的回答-这无疑会使阅读变得有趣。但我有一个问题;为什么我可以毫无问题地执行这个过程(即使它可能是dbo所有的),但却没有UDT的权限?为什么UDT与程序不同?谢谢,我不知道。我怀疑其根源在于程序是对象,类型不是。看见也可能是因为使用了类型,所以过程的参数(即在执行之前)不包含在所有权链接中。或者您可以使用授权条款创建过程。如你所见,我只是在猜测,我太懒了,无法测试…再次感谢!我会继续努力,把我找到的任何东西都发出去,但你帮了我很大的忙——非常感谢。