我需要什么权限才能使用用户定义的表类型

Wha*_*int 7 t-sql sql-server stored-procedures

背景:

我有同一个数据库的两个帐户,一个“主”帐户和另一个(子)帐户,用于我的网站连接到服务器,以便我可以管理用户可以做什么和不能做什么。这个帐户的很多权限在我访问它之前就已经存在了,所以我不知道所有权限到底是什么,除了我管理的那些。

有一个其他人创建的用户定义的表类型,不要问我他们为什么这样做,

CREATE TYPE [dbo].[AffectedServiceList] AS TABLE(
    [AffSerName] [nvarchar](200) NULL
)
GO
Run Code Online (Sandbox Code Playgroud)

这种类型用于像这样的存储过程

ALTER PROCEDURE [dbo].[Contractsetup]  @OtherParams, --Easier than typing them all
                                       @list        dbo.AFFECTEDSERVICELIST READONLY
Run Code Online (Sandbox Code Playgroud)

主账号可以完美的执行和修改这个过程,但是子账号不能运行或者修改这个存储过程,而在使用受影响的servicelist类型的时候会报错

找不到类型“AffectedServiceList”,因为它不存在或您没有权限。

我试过这样做 grant execute on type::dbo.AFFECTEDSERVICELIST to subaccount

但它仍然返回与权限相同的错误。我已经将它消除到权限中,因为当我尝试修改主帐户时,我刚刚得到

命令成功完成。

sep*_*pic 10

要使用用户定义的表类型,您需要EXECUTE获得CONTROL其权限。你的代码

grant execute on type::dbo.AFFECTEDSERVICELIST to subaccount
Run Code Online (Sandbox Code Playgroud)

是正确的。

这里缺少的是REFERENCES许可:

grant references on type::dbo.AFFECTEDSERVICELIST to subaccount
Run Code Online (Sandbox Code Playgroud)

这需要能够在代码中引用此类型。

为了只能使用 UDT 创建过程,您只需要REFERENCES权限。EXECUTE或者CONTROL需要能够执行代码(proc)


Wha*_*int 3

经过更多挖掘后,我需要添加的权限execute不是control。

所以不要这样做;

grant execute on type::dbo.AFFECTEDSERVICELIST to subaccount
Run Code Online (Sandbox Code Playgroud)

我实际上需要这样做;

grant control on type::dbo.AFFECTEDSERVICELIST to subaccount
Run Code Online (Sandbox Code Playgroud)

  • 打扰一下,您也需要 REFERENCES 权限 (2认同)