MySQL REVOKE语句的用法(附带实例)
在 MySQL 中授予角色权限后,可以对角色拥有的权限进行维护,如添加或回收权限。回收角色拥有的权限需要使用 REVOKE 语句。
注意,修改了角色拥有的权限,会影响被赋予该角色的用户拥有的权限。回收角色拥有的权限的语法如下所示:
1) 使用如下 SQL 语句回收角色 teacher 拥有的权限。需要注意的是,不能直接在数据库名后面加通配符“*”,因为该角色是没有对其他表的操作权限的,这样做相当于扩大了角色拥有的权限。
例如,下面的执行结果会报错:
正确的使用方式如下所示:
2) 回收权限前,使用 SHOW GRANTS 语句查看角色 teacher 拥有的权限,结果如下所示:
回收权限后,使用 SHOW GRANTS 语句查看角色 teacher 拥有的权限,结果如下所示:
注意,修改了角色拥有的权限,会影响被赋予该角色的用户拥有的权限。回收角色拥有的权限的语法如下所示:
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 权限。