首页 > 编程笔记 > MySQL笔记 阅读:4

MySQL REVOKE语句的用法(附带实例)

MySQL 中授予角色权限后,可以对角色拥有的权限进行维护,如添加或回收权限。回收角色拥有的权限需要使用 REVOKE 语句。

注意,修改了角色拥有的权限,会影响被赋予该角色的用户拥有的权限。回收角色拥有的权限的语法如下所示:
REVOKE privileges ON tablename FROM 'rolename';
下面用一个例子测试权限回收:
1) 使用如下 SQL 语句回收角色 teacher 拥有的权限。需要注意的是,不能直接在数据库名后面加通配符“*”,因为该角色是没有对其他表的操作权限的,这样做相当于扩大了角色拥有的权限。

例如,下面的执行结果会报错:
mysql> REVOKE INSERT, UPDATE, DELETE ON test.* FROM 'teacher';
ERROR 1141 (42000): There is no such grant defined for user 'teacher' on host '%'

正确的使用方式如下所示:
mysql> REVOKE INSERT, UPDATE, DELETE ON test.test_paper FROM 'teacher';
mysql> REVOKE SELECT ON test.book FROM 'teacher';

2) 回收权限前,使用 SHOW GRANTS 语句查看角色 teacher 拥有的权限,结果如下所示:
mysql> SHOW GRANTS FOR 'teacher';
+------------------------------------------------------------------------------+
| Grants for teacher@%                                                         |
+------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'teacher'@'%'                                          |
| GRANT SELECT ON `test`.`book` TO 'teacher'@'%'                               |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.`test_paper` TO 'teacher'@'%' |
+------------------------------------------------------------------------------+

回收权限后,使用 SHOW GRANTS 语句查看角色 teacher 拥有的权限,结果如下所示:
mysql> SHOW GRANTS FOR 'teacher';
+------------------------------------------------------+
| Grants for teacher@%                                 |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'teacher'@'%'                  |
| GRANT SELECT ON `test`.`test_paper` TO 'teacher'@'%' |
+------------------------------------------------------+
2 rows in set (0.00 sec)
可以看到,这时角色 teacher 只拥有对试卷表的 SELECT 权限。

相关文章