我遇到了一个问题,其中在SQL Server 2005中授予对特定存储过程的EXECUTE权限不起作用。一些测试人员弄乱了权限-
并发现,如果他们还对存储过程授予了CONTROL权限-则运行正常。现在,他们确信授予CONTROL权限是必经之路。
我知道这不是真的-实际上,我认为真正的问题是用户对存储过程所依据的表没有选择/插入/更新/删除权限。问题是,我似乎无法在网上找到任何可以证明这一点的东西。
我对么?是否有人知道有关此的任何文档?
提前致谢。
更多信息以回应评论:存储过程正在执行多次删除。它首先删除将被删除的“主”记录孤立的所有记录,然后最后删除父记录。
同样,我们看到的错误表明用户没有足够的权限-或存储过程不存在。我们已经确认我们使用的是正确的用户,并且已向该用户授予EXECUTE权限。
如果存储过程是使用EXECUTE AS
CALLER创建的(我相信这是默认设置),那么调用者除执行过程中的EXECUTE之外,还必须具有执行存储过程所必需的所有权限。
从用于EXECUTE AS的SQL Server文档中:
CALLER指定模块内部的语句在模块调用者的上下文中执行。执行模块的用户不仅必须对模块本身具有适当的权限,而且还必须对模块所引用的任何数据库对象都具有适当的权限。
请注意,由于SQL
Server使用所有权链处理权限检查的方式,并非总是严格如此,而且我猜想在过程上授予CONTROL(将所有权状态授予被授予者)会导致这些权限检查成为绕过。
如果使用EXECUTE AS OWNER创建该过程,则除了该过程的EXECUTE之外,您无需授予任何权限。
授予Snowflake中所有存储过程的执行权限。 我想我需要添加执行权限,但我不知道在雪花中需要在哪里配置存储过程权限。 有人想给存储过程/表权限吗?
问题内容: 在开发具有许多存储过程的应用程序时,是否应该将它们存储在某种源版本控制系统中(例如源安全,TFS,SVN)?如果是这样,为什么?是否有使用SQL Server Management Studio进行操作的便捷前端方法? 问题答案: 是的。所有代码都应存储在源代码管理中。 简而言之,代码就是代码,并且会发生错误。能够回头看看随着时间的推移发生了什么变化并能够返回到那些变化,这是很好的。
问题内容: 我有一个脚本,可以创建数据库,存储的proc,视图,表,udf。我想包含一个脚本来创建用户’user_1’并授予对数据库的执行权限。 我尝试以下为所有存储的过程创建Grant exec命令 但是不起作用。它给 ’;’附近的语法不正确。 我该如何解决? 问题答案: 创建登录名:创建服务器级别的登录名。然后…创建用户:让登录帐户附加到您的数据库。然后…将执行权限授予:向您的数据库中的所有s
我正在努力学习和编写elasticsearch查询。我意识到有一个“exists”字段返回指定字段exists或not的文档。为了了解,我编写了一个简单的查询,我想学习更多和玩查询结构。
我有一个水槽代理,它从假脱机目录源读取,并在一些转换后写入 hdfs。由于 flume 尝试将处理后的文件重命名为“.已完成“,我在假脱机目录中写入时遇到权限被拒绝异常。 我想知道向敏感数据授予写入权限的安全性如何。 是否有一轮关于水槽的解决方案来识别假脱机目录中已处理的文件
问题内容: 我在执行以下操作的应用程序时遇到问题: PL / SQL包“ A”包含应用程序的所有功能/过程 “ A”归“ USER_A”所有 “ A”在Oracle中创建用户帐户,并在这些用户下创建表 ‘A’还必须能够对用户表进行TRUNCATE / INSERT 注意-所有创建的表都位于安全性较低的表空间内,我们将其称为“ MY_TS”。尽管此程序包在每个新用户的架构中创建用户和表,但“ A”无