用户和权限撤销用户权限

举报
Ustinian_2022 发表于 2022/07/27 17:55:15 2022/07/27
【摘要】 30.6 撤销用户权限MySQL中既可以为用户添加权限,也可以撤销用户的权限。MySQL支持使用REVOKE语句撤销用户的权限,同时,也可以通过操作数据表来撤销用户的权限。30.6.1 使用REVOKE语句撤销用户权限REVOKE语句可以撤销用户的权限,其语法格式如下:REVOKE priv_type [(column_list)] [, priv_type [(column...

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数据表.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。