在本教程中,您将学习如何使用MySQL中的REVOKE
语句从MySQL帐户中撤销权限。
我们强烈建议您遵循以下教程,以更好地了解MySQL REVOKE
语句的工作原理:
MySQL REVOKE语句简介
要从用户帐户撤销权限,您可以使用MySQL REVOKE
语句。MySQL允许您从用户撤销一个或多个特权或所有权限。
以下说明从用户撤销指定权限的语法:
REVOKE privilege_type [(column_list)]
[, priv_type [(column_list)]]...
ON [object_type] privilege_level
FROM user [, user]...
我们来详细看看MySQL REVOKE
语句使用 -
- 首先,在
REVOKE
关键字之后指定要从用户撤销的权限列表,需要用逗号分隔权限。 - 其次,在
ON
子句中指定要撤销权限的权限级别。 - 第三,在
FROM
子句中指定要撤销的权限的用户帐户
请注意,要从用户帐户撤销权限,您必须具有
GRANT OPTION
权限和要撤销的权限。
要撤消用户的所有权限,请使用以下REVOKE
语句:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user]…
要执行REVOKE ALL
语句,必须具有全局CREATE USER
权限或mysql
数据库的UPDATE
权限。
要撤销代理用户,请使用REVOKE PROXY
命令,如下所示:
REVOKE PROXY ON user FROM user [, user]...
代理用户是MySQL中有效的用户,可以模拟(假冒)另一个用户,因此代理用户拥有其模拟的用户的所有权限。
在撤消用户权限之前,最好通过使用SHOW GRANTS
语句来检查用户拥有的权限的情况,如下所示:
SHOW GRANTS FOR user;
MySQL REVOKE示例
假设rfc
用户对示例数据库(yiibaidb)具有SELECT,UPDATE和DELETE权限。现在,如果要从rfc
用户撤销UPDATE
和DELETE
权限,可以按如下方式执行:
首先,使用SHOW GRANTS
语句检查用户的权限:
-- 查看用户的当前权限
SHOW GRANTS FOR rfc;
-- 授予用户权限
GRANT SELECT, UPDATE, DELETE ON `yiibaidb`.* TO 'rfc'@'%';
执行上面查询语句,得到以下结果 -
+-----------------------------------------------------------+
| Grants for rfc@% |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'rfc'@'%' |
| GRANT SELECT, UPDATE, DELETE ON `yiibaidb`.* TO 'rfc'@'%' |
+-----------------------------------------------------------+
请注意,确实按照授予用户权限的教程文章学习并操作后,您可以创建rfc
帐户并向其授予SELECT
,UPDATE
和DELETE
特权,如下所示:
-- 创建用户
CREATE USER IF NOT EXISTS rfc IDENTIFIED BY 'newpasswd';
-- 授予用户权限
GRANT SELECT, UPDATE, DELETE ON yiibaidb.* TO rfc;
其次,从rfc
用户撤销UPDATE
和DELETE
权限,参考以下语句:
REVOKE UPDATE, DELETE ON yiibaidb.* FROM rfc;
第三,可以使用SHOW GRANTS
命令再次查看rfc
用户的权限。
-- 查看用户权限
SHOW GRANTS FOR 'rfc'@'%';
-- 授予用户权限
GRANT SELECT ON `yiibaidb`.* TO 'rfc'@'%';
如果要撤销rfc
用户的所有权限,请执行以下命令:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM rfc;
如果再次查看rfc
用户的权限,您将看到rfc
用户已经没有了权限。
-- 查看用户权限
SHOW GRANTS FOR rfc;
GRANT USAGE ON *.* TO 'rfc'@'%';
请注意,使用
USAGE
权限意味着MySQL中没有特权。
当MySQL REVOKE命令生效时
MySQL REVOKE
语句的生效时间取决于权限级别,如下所示:
- 客户端在后续会话中连接到MySQL时,对全局权限所做的更改才会生效。这些更改不适用于所有当前连接的用户。
- 数据库权限的更改将在下一个
USE
语句之后生效。 - 表和列权限的更改将在进行更改之后发出的所有查询时生效。
在本教程中,您学习了如何使用MySQL REVOKE
语句来撤销MySQL用户的权限。