当前位置:  开发笔记 > 数据库 > 正文

是否应对SQL Server 2005中的存储过程赋予CONTROL权限?

如何解决《是否应对SQLServer2005中的存储过程赋予CONTROL权限?》经验,为你挑选了1个好方法。

我遇到了一个问题,即在SQL Server 2005中的特定存储过程上授予EXECUTE权限不起作用.一些测试人员弄乱了权限 - 并发现如果他们还在存储过程中授予了CONTROL权限 - 那么它运行正常.他们现在确信授予CONTROL权限是可行的方法.

我知道这不可能是真的 - 事实上我认为真正的问题是用户没有对存储过程运行的表的选择/插入/更新/删除权限.问题是,我似乎无法在网上找到任何证明它的东西.

我对么?有人知道有任何关于此事的文件吗?

提前致谢.

响应注释的更多信息:存储过程正在执行多次删除.它首先删除将被删除的"主"记录孤立的所有记录,然后最终删除父记录.

此外,我们看到的错误表明用户没有足够的权限 - 或者存储过程不存在.我们已经确认我们正在使用正确的用户,并且该用户已获得EXECUTE权限.



1> Eric Rosenbe..:

如果存储过程是使用EXECUTE AS CALLER创建的(我相信这是默认设置),则调用者除具有对过程的EXECUTE之外,还必须具有执行存储过程所需的所有必要权限。

从用于EXECUTE AS的SQL Server文档中:

CALLER指定模块内的语句在模块调用者的上下文中执行。执行模块的用户不仅必须对模块本身具有适当的权限,而且还必须对模块引用的任何数据库对象都具有适当的权限。

请注意,由于SQL Server使用所有权链处理权限检查的方式,并不总是严格正确,而且我猜想在过程上授予CONTROL(将所有权状态授予被授予者)会导致这些权限检查成为绕过。

如果使用EXECUTE AS OWNER创建该过程,则除了该过程的EXECUTE之外,您无需授予任何权限。

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有