#### 13.7.1.8 REVOKE 声明

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

```
REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user_or_role [, user_or_role] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user_or_role [, user_or_role] ...

REVOKE PROXY ON user_or_role
    FROM user_or_role [, user_or_role] ...

REVOKE role [, role ] ...
    FROM user_or_role [, user_or_role ] ...

user_or_role: {
    user (see Section 6.2.4, “Specifying Account Names”)
  | role (see Section 6.2.5, “Specifying Role Names”.
}
```

这[`撤销`](revoke.html)语句使系统管理员能够撤销特权和角色，这些特权和角色可以从用户帐户和角色中撤销。

有关特权级别的详细信息，允许的*`priv_type`*, *`priv_level`*， 和*`对象类型`*值，以及用于指定用户和密码的语法，请参阅[第 13.7.1.6 节，“GRANT 声明”](grant.html).

有关角色的信息，请参阅[第 6.2.10 节，“使用角色”](roles.html).

当。。。的时候[`只读`](server-system-variables.html#sysvar_read_only)系统变量已启用，[`撤销`](revoke.html)需要[`CONNECTION_ADMIN`](privileges-provided.html#priv_connection-admin)或特权（或已弃用的[`极好的`](privileges-provided.html#priv_super)特权），以及以下讨论中描述的任何其他必需特权。

[`撤销`](revoke.html)要么对所有命名的用户和角色成功，要么回滚，如果发生任何错误则无效。仅当对所有命名用户和角色都成功时，该语句才会写入二进制日志。

每个帐户名称都使用中描述的格式[第 6.2.4 节，“指定帐户名称”](account-names.html).每个角色名称都使用中描述的格式[第 6.2.5 节，“指定角色名称”](role-names.html).例如：

```
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
REVOKE SELECT ON world.* FROM 'role3';
```

帐户或角色名称的主机名部分，如果省略，则默认为`'%'`.

使用第一个[`撤销`](revoke.html)语法，你必须有[`授予选项`](privileges-provided.html#priv_grant-option)特权，并且您必须拥有要撤销的特权。

要撤消所有权限，请使用第二种语法，它会删除指定用户或角色的所有全局、数据库、表、列和例程权限：

```
REVOKE ALL PRIVILEGES, GRANT OPTION
  FROM user_or_role [, user_or_role] ...
```

`撤销所有特权，授予选项`不会撤销任何角色。

要使用这个[`撤销`](revoke.html)语法，你必须有全局[`创建用户`](privileges-provided.html#priv_create-user)特权，或[`更新`](privileges-provided.html#priv_update)的特权`mysql`系统架构。

的语法[`撤销`](revoke.html)关键字后跟一个或多个角色名称`从`子句指示要撤销角色的一个或多个用户或角色。

中命名的角色[`强制角色`](server-system-variables.html#sysvar_mandatory_roles)系统变量值不能被撤销。

被撤销的角色会立即影响被撤销的任何用户帐户，因此在该帐户的任何当前会话中，其权限会针对执行的下一条语句进行调整。

撤销角色会撤销角色本身，而不是它所代表的特权。假设帐户被授予包含给定特权的角色，并且还被显式授予特权或包含该特权的另一个角色。在这种情况下，如果第一个角色被撤销，该帐户仍然拥有该特权。例如，如果一个帐户被授予两个角色，每个角色都包括[`选择`](privileges-provided.html#priv_select)，撤销任一角色后，该账户仍可以选择。

`全部撤销 *.*`（在全局级别）撤销所有授予的静态全局权限和所有授予的动态权限。

要撤销权限和角色的用户帐户和角色必须存在，但当前不需要授予他们要撤销的权限和角色。

已授予但服务器不知道的已撤销权限将被撤销并显示警告。这种情况可能发生在动态特权中。例如，可以在安装注册它的组件时授予动态权限，但如果该组件随后被卸载，则该权限将变为未注册，尽管拥有该权限的帐户仍然拥有该权限并且可以从这些帐户中撤消该权限。

[`撤销`](revoke.html)删除权限，但不从`mysql.user`系统表。要完全删除用户帐户，请使用[`删除用户`](drop-user.html).看[第 13.7.1.5 节，“DROP USER 语句”](drop-user.html).

如果授权表包含包含混合大小写的数据库或表名的特权行，并且[`lower_case_table_names`](server-system-variables.html#sysvar_lower_case_table_names)系统变量设置为非零值，[`撤销`](revoke.html)不能用于撤销这些特权。在这种情况下，有必要直接操作授权表。([`授予`](grant.html)不创建这样的行时[`lower_case_table_names`](server-system-variables.html#sysvar_lower_case_table_names)已设置，但可能在设置变量之前已创建此类行。这[`lower_case_table_names`](server-system-variables.html#sysvar_lower_case_table_names)设置只能在初始化服务器时进行配置。）

当从[**mysql**](mysql.html)程序，[`撤销`](revoke.html)回应`查询正常，0 行受影响`.要确定操作后剩余的权限，请使用[`显示赠款`](show-grants.html).看[第 13.7.7.21 节，“显示授予声明”](show-grants.html).
