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)
经过更多挖掘后,我需要添加的权限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)
| 归档时间: |
|
| 查看次数: |
4610 次 |
| 最近记录: |