首页 > 解决方案 > 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的,但似乎一旦授予特权,该过程就会以某种方式被调用(?)。有没有办法从程序中授予用户对该程序的权限?我能想到的唯一解决方法是创建另一个过程,仅用于授予此权限并单独调用它,但必须有更好的方法,对吧?

标签: mysqlstored-proceduresmariadbgrant

解决方案


推荐阅读