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
权限,这些权限在包含该例程的范围内授予,该帐户可以查看除定义之外的所有例程属性。