如何解决是否应该对SQL Server 2005中的存储过程赋予CONTROL权限?
如果存储过程是使用EXECUTE AS CALLER创建的(我相信这是默认设置),那么调用者除执行过程中的EXECUTE之外,还必须具有执行存储过程所必需的所有权限。
从用于EXECUTE AS的sql Server文档中:
CALLER指定模块内部的语句在模块调用者的上下文中执行。执行模块的用户不仅必须对模块本身具有适当的权限,而且还必须对模块所引用的任何数据库对象都具有适当的权限。
请注意,由于sql Server使用所有权链处理权限检查的方式,并非总是严格如此,而且我猜想在过程上授予CONTROL(将所有权状态授予被授予者)会导致这些权限检查成为绕过。
如果使用EXECUTE AS OWNER创建该过程,则除了该过程的EXECUTE之外,您无需授予任何权限。
解决方法
我遇到了一个问题,其中在SQL Server 2005中授予对特定存储过程的EXECUTE权限不起作用。一些测试人员弄乱了权限-
并发现,如果他们还对存储过程授予了CONTROL权限-则运行正常。现在,他们确信授予CONTROL权限是必经之路。
我知道这不是真的-实际上,我认为真正的问题是用户对存储过程所依据的表没有选择/插入/更新/删除权限。问题是,我似乎无法在网上找到任何可以证明这一点的东西。
我对么?是否有人知道有关此的任何文档?
提前致谢。
更多信息以回应评论:存储过程正在执行多次删除。它首先删除将被删除的“主”记录孤立的所有记录,然后最后删除父记录。
同样,我们看到的错误表明用户没有足够的权限-或存储过程不存在。我们已经确认我们使用的是正确的用户,并且已向该用户授予EXECUTE权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。