首页 > 解决方案 > MySQL - 嵌套存储过程是否使用调用定义器作为调用者?

问题描述

当存储过程 A (SPA) 使用 DEFINER 安全性,但调用使用 INVOKER 安全性的存储过程 B (SPB) 时,存储过程 B 是否根据调用 SP 的 DEFINER 访问或原始 INVOKER/CURRENT_USER() 检查 INVOKER 访问?

标签: mysqlsecurity

解决方案


看来 MySQL 确实使用原始安全调用者作为嵌套调用的调用者。我执行了一些测试来检查上述内容,当 SPA 使用具有适当权限的 DEFINED 帐户时,它使用这些帐户凭据作为 SPB 中的 INVOKER(执行良好),但是当我使用仅具有的帐户调用 SPB 时(对于例如)EXECUTE 特权但不是 SELECT(并且 SPB 执行 SELECT)它失败。

因此,具有 DEFINER 安全性的 SP 将该 DEFINER 帐户作为 INVOKER 传递给任何嵌套的 SP。


推荐阅读