mysql - MariaDB GRANT EXECUTE on *this* 过程
问题描述
背景: 我目前正在开发一种工具,可以在我的 MariaDB 服务器上自动创建和设置数据库。为此,我有一个“设置”用户。为了在数据库中创建所需的一切,用户在创建过程开始时获得了对新数据库的一堆权限。完成后,我想再次调用一个撤销权限的程序。
为此,我创建了一个表,其中包含用户需要的所有默认权限。我的行动计划是首先撤销设置用户的所有权限,然后添加表中的所有权限,以及执行重置过程的权限。
撤销权限工作正常。从表中添加权限也是如此。我遇到的唯一问题是,每当我尝试GRANT
将重置过程本身的权限授予设置用户时,都会出现递归错误:
有问题的代码:
GRANT EXECUTE ON PROCEDURE SchemaName.ResetPrivileges TO `setup`@`10.0.0.4`;
(从 ResetPrivileges 过程中调用)
错误信息:
SQL 错误 (1456):例程 ResetPrivileges 超出了递归限制 0(由 max_sp_recursion_depth 变量设置)
问题:
我不太确定 MariaDB 是如何处理GRANT
的,但似乎一旦授予特权,该过程就会以某种方式被调用(?)。有没有办法从程序中授予用户对该程序的权限?我能想到的唯一解决方法是创建另一个过程,仅用于授予此权限并单独调用它,但必须有更好的方法,对吧?
解决方案
推荐阅读
- c - 使用malloc函数时单链表程序错误(更新一)
- r - 向字符串/字符向量中的每个元素添加可变长度填充
- spring - Spring-integration ExpressionEvaluatingRequestHandlerAdvice 无法评估 failureExpression
- c# - 如何在xamarin中删除集合视图中的一个单元格和sqlite中的行的删除按钮?
- spring-boot - :EL1008E:在“java.util.ArrayList”类型的对象上找不到属性或字段“LEVEL”-可能不是公共的或无效的?
- azure - 一个可以侦听所有容器的 Cosmos DB 更改源的 Azure 函数
- docker - 连接期间的 Docker 错误:发布 http://docker:2375/v1.40/build?
- vue.js - 在同一个父组件中使用相同的 .vue 组件两次 - 如何区分
- c - 为什么 gcc 停止对 7.2 版的严格别名违规发出警告?
- angular - Angular,找不到模块 typeahead-basic