2月阅读周·MySQL数据库入门:数据库的高级操作之权限管理篇

举报
叶一一 发表于 2025/02/23 15:18:51 2025/02/23
【摘要】 引言《MySQL数据库入门》作为一种技术的入门教程,最重要也最难的一件事情就是要将一些非常复杂、难以理解的思想和问题简单化,让初学者能够轻松理解并快速掌握。本教材对每个知识点都进行了深入的分析,并针对每个知识点精心设计了相关案例,然后模拟这些知识点在实际工作中的运用,真正做到了知识的由浅入深、由易到难。全书可以大致分成三个部分的内容:第1章主要介绍了数据库的相关知识,包括创建的数据库产品、数...

引言

《MySQL数据库入门》作为一种技术的入门教程,最重要也最难的一件事情就是要将一些非常复杂、难以理解的思想和问题简单化,让初学者能够轻松理解并快速掌握。本教材对每个知识点都进行了深入的分析,并针对每个知识点精心设计了相关案例,然后模拟这些知识点在实际工作中的运用,真正做到了知识的由浅入深、由易到难。

全书可以大致分成三个部分的内容:

第1章主要介绍了数据库的相关知识,包括创建的数据库产品、数据库存储结构、MySQL的安装配置与使用等。通过本章的学习,要求初学者对数据库有一个大致的认识,并且可以独立完成MySQL数据库的安装和配置。

第6~7章讲解了数据库中的事务、存储过程以及视图,这些内容可以对MySQL数据库进行性能优化,希望初学者可以循序渐进掌握MySQL中的各项技术。

第8章讲解了MySQL数据库的高级操作,包括数据的备份还原、用户管理和权限管理,要求初学者会对数据进行备份还原,并且可以通过权限控制管理不同的用户。

权限管理

MySQL的权限

MySQL中的权限信息被存储在MySQL数据库的user、db、host、tables_priv、column_priv和procs_priv表中,当MySQL启动时会自动加载这些权限信息,并将这些权限信息读取到内存中。接下来通过表1-1列举一下MySQL的相关权限以及在user表中对应的列和权限范围。

表1-1 MySQL的权限信息


表1-1对MySQL的权限以及权限的范围进行了介绍,对于初学者来说可能无法理解,接下来针对表中部分权限进行分析,具体如下。

(1)CREATE和DROP权限,可以创建数据库、表、索引,或者删除已有的数据库、表、索引。

(2)INSERT、DELETE、UPDATE、SELECT权限,可以对数据库中的表进行增删改查操作。

(3)INDEX权限,可以创建或删除索引,适用于所有的表。

(4)ALTER权限,可以用于修改表的结构或重命名表。

(5)GRANT权限,允许为其他用户授权,可用于数据库和表。

(6)FILE权限,被赋予该权限的用户能读写MySQL服务器上的任何文件。

上述这些权限只要了解即可,无须特殊记忆。

授予权限

在前面的章节中,之所以可以对数据进行增删改查的操作,是因为数据库中的用户拥有不同的权限,合理的授权可以保证数据库的安全。在MySQL中提供了一个GRANT语句,该语句可以为用户授权。

GRANT语句的语法格式如下:

GRANT privileges [(columns)][,privileges[(columns)]] ON database.table
    TO 'username'@'hostname' [IDENTIFIED BY [PASSWORD]'password']
    [,'username'@'hostname' [IDENTIFIED BY [PASSWORD]'password']]…
    [WITH with_option [with_option]…]

上述语法格式中,privileges表示权限类型,columns参数表示权限作用于某一列,该参数可以省略不写,此时权限作用于整个表,username表示用户名,hostname表示主机名,IDENTIFIED BY参数为用户设置密码,PASSWORD参数为关键字,password为用户的新密码。

WITH关键字后面可以带有多个参数with_option,这个参数有5个取值,具体如下。

(1)GRANT OPTION:将自己的权限授予其他用户。

(2)MAX_QUERIES_PER_HOUR count:设置每小时最多可以执行多少次(count)查询。

(3)MAX_UPDATES_PER_HOUR count:设置每小时最多可以执行多少次更新。

(4)MAX_CONNECTIONS_PER_HOUR count:设置每小时最大的连接数量。

(5)MAX_USER_CONNECTIONS:设置每个用户最多可以同时建立连接的数量。

使用GRANT语句创建一个新的用户,用户名为user4、密码为123,user4用户对所有数据库有INSERT、SELECT权限,并使用WITH GRANT OPTION子句,GRANT语句如下:

GRANT INSERT,SELECT ON *.* TO 'user4'@'localhost' IDENTIFIED BY '123'
WITH GRANT OPTION;

上述语句执行成功后,可以使用SELECT语句来查询user表中的用户权限,查询结果如下:

mysql>use mysql;
Database changed
mysql>SELECT Host,User,Password,Insert_priv,Select_priv,Grant_priv FROM
mysql.user WHERE user='user4'\G
*************************** 1. row ***************************
      Host: localhost
      User: user4
  Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Insert_priv: Y
Select_priv: Y
Grant_priv: Y
1 row in set (0.05 sec)

从上述结果可以看出,User的值为user4,Insert_priv、Select_priv、Grant_priv的值都为Y,因此可以说明用户user4对所有数据库具有增加、查询以及对其他用户赋予相应权限的功能。

查看权限

通过前面的讲解可以知道,使用SELECT语句可以查询user表中的权限信息,但是该语句不仅需要指定用户,还需要指定查询的权限,比较麻烦,为了方便查询用户的权限信息,MySQL还提供了一个SHOW GRANTS语句。

SHOW GRANTS的语法格式如下:

SHOW GRANTS FOR 'username'@'hostname';

从上述语法格式可以看出,SHOW GRANTS语法格式比较简单,只需要指定查询的用户名和主机名即可。

使用SHOW GRANTS语句查询root用户的权限,具体如下:

SHOW GRANTS FOR 'root'@'localhost';

上述语句执行成功后,可以看到如下结果:

mysql>SHOW GRANTS FOR 'root'@'localhost'\G
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO 'root
'@'localhost' IDENTIFIED BY PASSWORD '*27FE6B5A028489ECF5079808
FC148190EB26F4D7' WITH GRANT OPTION

从上述结果可以看出,root用户拥有所有权限,并且可以为其他用户赋予权限。为了让初学者更好地掌握SHOW GRANTS语句,接下来通过查看普通用户权限的案例来演示SHOW GRANTS的用法。

使用SHOW GRANTS语句,查询user4用户的权限信息,具体如下:

SHOW GRANTS FOR 'user4'@'localhost';

上述语句执行结果如下:

mysql>SHOW GRANTS FOR 'user4'@'localhost'\G
*************************** 1. row ***************************
Grants for user4@localhost: GRANT SELECT, INSERT ON *.* TO 'use
r4'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78
ED04B6A265E05AA257' WITH GRANT OPTION
1 row in set (0.00 sec)

从上述结果可以看出,user4用户有SELECT权限和INSERT权限,并且具有给其他用户赋予SELECT、INSERT权限的功能。

收回权限

在MySQL中,为了保证数据库的安全性,需要将用户不必要的权限收回,例如,数据管理员发现某个用户不应该具有DELETE权限,就应该及时将其收回。为了实现这种功能,MySQL提供一个REVOKE语句,该语句可以收回用户的权限。

REVOKE的语法格式如下:

REVOKE privileges [columns][,privileges[(columns)]] ON database.table
FROM 'username'@'hostname'[,'username'@'hostname'] …

REVOKE语法格式中的参数与GRANT语句中的参数意思相同,privileges参数表示收回的权限,columns表示权限作用于哪列上,如果不指定该参数表示作用于整个表。

使用REVOKE语句收回user4用户的INSERT权限,REVOKE语句如下:

REVOKE INSERT ON *.* FROM 'user4'@'localhost';

上述语句执行成功后,可以使用SELECT语句来查询user表中的用户信息,查询结果如下:

mysql>SELECT Host,User,Password,Insert_priv FROM mysql.user WHERE user=
'user4'\G
*************************** 1. row ***************************
      Host: localhost
      User: user4
  Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Insert_priv: N
1 row in set (0.02 sec)

从上述结果可以看出,Insert_priv的权限值已经被修改为N,因此可以说明REVOKE语句将user4的INSERT权限收回了。

如果用户的权限比较多,想一次性将其收回,使用上述语句就会比较麻烦,为此,REVOKE语句还提供了收回所有权限的功能。

REVOKE语句收回全部权限的语法格式如下:

REVOKE ALL PRIVILEGES,GRANT OPTION
FROM  'username'@'hostname' [,'username'@'hostname'] …

使用REVOKE语句收回user4的所有权限,REVOKE语句如下:

REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'root'@'localhost';

上述语句执行成功后,可以使用SELECT语句来查询user表中的用户信息,查询结果如下:

mysql>SELECT Host,User,Password,Insert_priv,Select_priv,Grant_priv
from mysql.user where user='user4'\G
*************************** 1. row ***************************
      Host: localhost
      User: user4
  Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Insert_priv: N
Select_priv: N
Grant_priv: N
1 row in set (0.13 sec)

从上述结果可以看出,user4用户的INSERT、SELECT、GRANT权限都被收回了。

总结

在MySQL数据库中,为了保证数据的安全性,数据管理员需要为每个用户赋予不同的权限,以满足不同用户的需求。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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