### 25.2.2 存储例程和 MySQL 权限

MySQL 授权系统将存储的例程考虑在内，如下所示：

-   这[`创建例程`](privileges-provided.html#priv_create-routine)创建存储例程需要特权。

-   这[`改变常规`](privileges-provided.html#priv_alter-routine)需要特权来更改或删除存储的例程。如有必要，此特权会自动授予例程的创建者，并在删除例程时从创建者处删除。

-   这[`执行`](privileges-provided.html#priv_execute)执行存储的例程需要特权。但是，如有必要，此特权会自动授予例程的创建者（并在删除例程时从创建者处删除）。另外，默认`SQL 安全`例程的特征是`定义者`，这使有权访问与例程关联的数据库的用户能够执行例程。

-   如果[`automatic_sp_privileges`](server-system-variables.html#sysvar_automatic_sp_privileges)系统变量为 0，则[`执行`](privileges-provided.html#priv_execute)和[`改变常规`](privileges-provided.html#priv_alter-routine)权限不会自动授予例程创建者或从例程创建者中删除。

-   例程的创建者是用于执行`创建`声明。这可能与名为`定义者`在例程定义中。

-   被命名为例程的帐户`定义者`可以看到所有的例程属性，包括它的定义。因此，该帐户可以完全访问由以下各项生成的例程输出：

    -   的内容[`INFORMATION_SCHEMA.ROUTINES`](information-schema-routines-table.html)桌子。

    -   这[`显示创建函数`](show-create-function.html)和[`显示创建过程`](show-create-procedure.html)陈述。

    -   这[`显示功能代码`](show-function-code.html)和[`显示程序代码`](show-procedure-code.html)陈述。

    -   这[`显示功能状态`](show-function-status.html)和[`显示程序状态`](show-procedure-status.html)陈述。

-   对于命名为例程的帐户以外的帐户`定义者`，对常规属性的访问取决于授予帐户的权限：

    -   随着[`SHOW_ROUTINE`](privileges-provided.html#priv_show-routine)特权或全局[`选择`](privileges-provided.html#priv_select)特权，该帐户可以查看所有例程属性，包括其定义。

    -   随着[`创建例程`](privileges-provided.html#priv_create-routine), [`改变常规`](privileges-provided.html#priv_alter-routine)要么[`执行`](privileges-provided.html#priv_execute)在包含例程的范围内授予特权，帐户可以查看除其定义之外的所有例程属性。
