MySQL 8.4 参考手册  /  ...  /  存储例程和 MySQL 权限

27.2.2 存储例程和 MySQL 权限

MySQL 授权系统考虑存储例程,如下所示

  • 需要 CREATE ROUTINE 权限才能创建存储例程。

  • 需要 ALTER ROUTINE 权限才能更改或删除存储例程。如果需要,此权限会自动授予例程创建者,并在例程被删除时从创建者撤销。

  • 需要 EXECUTE 权限才能执行存储例程。但是,此权限会自动授予例程创建者(并在例程被删除时从创建者撤销)。此外,例程的默认 SQL SECURITY 特性为 DEFINER,这使拥有与例程关联的数据库访问权限的用户能够执行该例程。

  • 如果 automatic_sp_privileges 系统变量为 0,则不会自动授予 EXECUTEALTER ROUTINE 权限,也不会从例程创建者那里撤销这些权限。

  • 例程创建者是执行其 CREATE 语句的帐户。这可能与例程定义中作为 DEFINER 命名的帐户不同。

  • 作为例程 DEFINER 命名的帐户可以查看所有例程属性,包括其定义。因此,该帐户可以完全访问通过以下方式产生的例程输出:

  • 对于不是作为例程 DEFINER 命名的帐户,对例程属性的访问取决于授予该帐户的权限

    • 使用 SHOW_ROUTINE 权限或全局 SELECT 权限,该帐户可以查看所有例程属性,包括其定义。

    • 使用 CREATE ROUTINEALTER ROUTINEEXECUTE 权限,这些权限在包含该例程的范围内授予,该帐户可以查看除定义之外的所有例程属性。