用户和权限撤销用户权限
30.6 撤销用户权限
MySQL中既可以为用户添加权限,也可以撤销用户的权限。MySQL支持使用REVOKE语句撤销用户的权限,同时,也可以通过操作数据表来撤销用户的权限。
30.6.1 使用REVOKE语句撤销用户权限
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”.
}
其中,部分参数说明如下:
·priv_type:表示权限的类型;
·column_list:表示撤回的权限作用于数据表中的哪些字段上,此参数可以省略,如果省略,则表示撤回的权限作用于整个数据表;
·FROM:表示对哪个用户执行撤回权限的操作。
(1)使用REVOKE语句撤销binghe_test用户对所有数据表的删除权限。
mysql> REVOKE DELETE ON *.* FROM 'binghe_test'@'localhost';
Query OK, 0 rows affected (0.00 sec)
SQL语句执行成功,查看binghe_test用户的数据库权限。
mysql> SHOW GRANTS FOR 'binghe_test'@'localhost';
+------------------------------------------------------------------+
| Grants for binghe_test@localhost |
+------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO 'binghe_test'@'localhost' |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
此时,binghe_test用户对所有数据表的删除权限已经被撤销。
(2)REVOKE语句不能撤销用户的USAGE权限,也就是说,REVOKE语句不能删除MySQL中的用户,例如,MySQL中的binghe_login用户的权限如下:
mysql> SHOW GRANTS FOR 'binghe_login'@'localhost';
+--------------------------------------------------+
| Grants for binghe_login@localhost |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'binghe_login'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)
结果显示,binghe_login用户只拥有登录MySQL的权限。使用REVOKE语句撤销binghe_login用户的USAGE权限。
mysql> REVOKE USAGE ON *.* FROM 'binghe_login'@'localhost';
Query OK, 0 rows affected (0.00 sec)
SQL语句执行成功,查看binghe_login的权限。
mysql> SHOW GRANTS FOR 'binghe_login'@'localhost';
+--------------------------------------------------+
| Grants for binghe_login@localhost |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'binghe_login'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)
binghe_login用户仍然具有USAGE权限,说明REVOKE语句不能撤销用户的USAGE权限。
30.6.2 通过操作数据表撤销用户权限
本节以撤销binghe_test用户的权限为例进行简单说明。例如,通过修改mysql.user数据表的权限字段的值来撤销binghe_test用户对所有数据表的修改权限。
mysql> UPDATE mysql.user SET update_priv = 'N' WHERE user = 'binghe_test' AND host = 'localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
SQL语句执行成功,查看binghe_test用户的权限。
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR 'binghe_test'@'localhost';
+----------------------------------------------------------+
| Grants for binghe_test@localhost |
+----------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'binghe_test'@'localhost' |
+----------------------------------------------------------+
1 row in set (0.00 sec)
可以看到,已经撤销了binghe_test用户对所有数据表的修改权限。
通过操作数据表来修改用户权限时,需要注意如下事项:
·如果是修改用户对所有数据库中所有数据表的权限,则可以操作mysql.user数据表;
·如果是修改用户对某个数据库下的所有数据表的权限,则可以操作mysql.db数据表;
·如果是修改用户对某个数据库下的特定数据表的权限,则可以操作mysql.tables_priv数据表;
·如果是修改用户对某个数据库下的某个数据表的特定字段的权限,则可以操作mysql.columns_priv数据表.
- 点赞
- 收藏
- 关注作者
评论(0)