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
权限在包括例程的范围内的账户,可以看到所有例程属性,除了其定义。
-