MySQL 授权系统考虑存储例程,如下所示:
CREATE ROUTINE
权限是创建存储例程所需的。ALTER ROUTINE
权限是更改或删除存储例程所需的。如果需要,此权限会自动授予例程创建者,并在例程删除时从创建者撤销。EXECUTE
权限是执行存储例程所需的。但是,如果需要,此权限会自动授予例程创建者(并在例程删除时从创建者撤销)。此外,例程的默认SQL SECURITY
特性为DEFINER
,这使能够访问与例程关联的数据库的用户可以执行该例程。如果
automatic_sp_privileges
系统变量为 0,则EXECUTE
和ALTER ROUTINE
权限不会自动授予例程创建者,也不会从例程创建者撤销。例程创建者是用来执行其
CREATE
语句的帐户。这可能与例程定义中作为DEFINER
命名的帐户不同。命名为例程
DEFINER
的帐户可以查看所有例程属性,包括其定义。因此,该帐户可以完全访问由以下内容生成的例程输出:Information Schema
ROUTINES
表的内容。
对于除命名为例程
DEFINER
的帐户以外的帐户,对例程属性的访问取决于授予该帐户的权限:使用
SHOW_ROUTINE
权限或全局SELECT
权限,该帐户可以查看所有例程属性,包括其定义。使用
CREATE ROUTINE
、ALTER ROUTINE
或EXECUTE
权限,这些权限授予的范围包含该例程,该帐户可以查看所有例程属性,但其定义除外。