MySQL 8.4 Reference Manual  /  ...  /  Stored Routines and MySQL Privileges

27.2.2 存储例程和 MySQL 权限

MySQL 权限系统将存储例程考虑在内如下:

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

  • 需要ALTER ROUTINE权限来修改或删除存储例程。这权限将自动授予创建例程的账户,如果必要,并在删除例程时撤销。

  • 需要EXECUTE权限来执行存储例程。然而,这权限将自动授予创建例程的账户,如果必要(并在删除例程时撤销)。此外,存储例程的默认SQL SECURITY特性为DEFINER

  • 如果automatic_sp_privileges系统变量为 0,EXECUTEALTER ROUTINE权限将不自动授予和撤销创建例程的账户。

  • 创建例程的账户是执行CREATE语句的账户。这可能不同于例程定义中指定的DEFINER账户。

  • 指定例程DEFINER的账户可以看到所有例程属性,包括其定义。该账户因此拥有对例程输出的完全访问权限,如:

    • 信息_schema ROUTINES 表的内容。

    • SHOW CREATE FUNCTIONSHOW CREATE PROCEDURE语句。

    • SHOW FUNCTION CODESHOW PROCEDURE CODE语句。

    • SHOW FUNCTION STATUSSHOW PROCEDURE STATUS语句。

  • 对于非指定例程DEFINER账户的账户,访问例程属性的权限取决于授予的权限:

    • 使用SHOW_ROUTINE特权或全局SELECT特权,账户可以查看所有存储程序的属性,包括定义。

    • 使用CREATE ROUTINEALTER ROUTINEEXECUTE特权,在包含存储程序的范围内授予的账户,可以查看所有存储程序的属性,但不包括定义。