存储的例程和MySQL特权
MySQL授予系统将存储的例程考虑如下:
- 将
CREATE ROUTINE需要的权限来创建存储例程。 - 在
ALTER ROUTINE需要的权限更改或删除保存的程序。如有必要,此特权会自动授予例程的创建者,并在删除例程后从创建者中删除。 - 该
EXECUTE权限才能执行存储程序。但是,如果有必要,此特权会自动授予例程的创建者(在删除例程后会从创建者中删除)。此外,SQL SECURITY例程的默认特征是DEFINER,这使有权访问与该例程相关联的数据库的用户可以执行该例程。 - 如果
automatic_sp_privileges系统变量为0,则不会自动将EXECUTE和ALTER ROUTINE特权授予例程创建者并从例程创建者中删除。 - 例程的创建者是用于为其执行
CREATE语句的帐户。这可能DEFINER与例程定义中名为的帐户不同。 名为例程的帐户
DEFINER可以参见所有例程属性,包括其定义。因此,该帐户可以完全访问由以下人员产生的常规输出:INFORMATION_SCHEMA.ROUTINES表的内容。- 该
SHOW CREATE FUNCTION和SHOW CREATE PROCEDURE语句。 - 该
SHOW FUNCTION CODE和SHOW PROCEDURE CODE语句。 - 该
SHOW FUNCTION STATUS和SHOW PROCEDURE STATUS语句。
对于除名为例程的帐户以外的帐户
DEFINER,对例程属性的访问取决于授予该帐户的特权:- 使用该
SHOW_ROUTINE特权或全局SELECT特权,该帐户可以参见所有常规属性,包括其定义。 - 随着
CREATE ROUTINE,ALTER ROUTINE或EXECUTE在包括次序的范围授予权限,帐户可以看到,除了它的定义所有的常规属性。
- 使用该
