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