当前位置:网站首页>【MySQL从入门到精通】【高级篇】(四)MySQL权限管理与控制
【MySQL从入门到精通】【高级篇】(四)MySQL权限管理与控制
2022-07-04 12:52:00 【码农飞哥】
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。
1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556
1. 简介
上篇文章我们介绍了MySQL中用户的创建,修改以及删除。这篇文章接着来学习MySQL的权限管理与控制。
2. 环境
| 环境 | 版本 |
|---|---|
| Red Hat | 4.8.5-39 |
| MySQL | 5.7 |
3. 权限管理
MySQL的权限管理简单的理解就是MySQL允许你做你权利以内的事情,不可以越界, 比如只允许你执行SELECT 操作,那么你就不能执行UPDATE 操作,只允许你从某台机器上连接MySQL,那么你就不能从除那台机器以外的其他机器连接MySQL。创建一个新账号之后,默认情况下只有information_schema数据库的权限,如果想要该用户可以操作其他数据库,这需要给用户分配特定的权限。
3.1. 权限列表
MySQL到底都有哪些权限呢?
mysql> show privileges;
GRANT和REVOKE语句中可以使用的权限如下:
| 权限 | user表中对应的列 | 权限的范围 |
|---|---|---|
| CREATE | Create_priv | 数据库、表或索引 |
| Drop | Drop_priv | 数据库,表或视图 |
| GRANTOPTION | Grant_priv | 数据库,表或存储过程 |
| REFERENCES | Reference_priv | 数据库或表 |
| EVENT | Event_priv | 数据库 |
| ALTRE | Alter_priv | 数据库 |
| DELETE | Delete_priv | 表 |
CREATE和DROP权限,可以创建新的数据库和表、或删除(移掉)已有的数据库和表,如果将MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的表。SELECT、INSERT、UPDATE和DELETE权限允许在一个数据库现有的表上实施操作。SELECT权限只有在它们真正从一个表中检索行时才被用到。INDEX权限允许创建或删除索引、INDEX适用于已有的表,如果具有某个表的CREATE权限,就可以在CREATE TABLE语句中包括索引定义。ALTER权限可以使用ALTER TABLE来更改表的结构和重新命名表。CREATE ROUTINE权限用来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,EXECUTE权限用来执行保存的程序。GRANT权限允许授权给其他用户,可用于数据库、表和程序。FILE权限使用户可以使用LOAD DATA INFILE和SELECT … INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件。
MySQL权限如何分布
| 权限分布 | 可能的设置权限 |
|---|---|
| 表权限 | SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、REFERENCES、INDEX、ALTER |
| 列权限 | SELECT、INSERT、UPDATE、REFERENCES |
| 过程权限 | EXEUTE、ALTER ROUTINE、GRANT |
2.2. 授予权限的原则
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
- 只授予满足需要的最小权限,防止用户干坏事,比如用户只需要查询,那就只给select权限就可以了。不需要给用户赋予UPDATE、INSERT或者DELETE权限。
- 创建用户的时候
限制用户的登录主机,一般是限制成指定IP或内网IP段。 - 为每个用户
设置满足密码复杂度的密码。 定期清理不需要的用户,回收权限或删除用户。
2.3. 授予权限
给用户授权的方式有2种,分别是通过把角色赋予用户授权和直接给用户授权。用户是数据库的使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全隐患。
授权命令:
GRANT 权限1,权限2,...权限n ON 数据库名称.表名称 TO 用户名@用户地址 [IDENTIFIED BY '密码口令'];
授权时如果发现没有该用户,则会直接新建一个用户。
比如:
- 给zhang3用户用本地命令行方式,授予test这个库下所有表的查插删改的权限。
GRANT SELECT,INSERT,DELETE,UPDATE ON test.* TO zhang3 IDENTIFIED BY '[email protected]';
- 授予通过网络方式登录的zhangsan用户,对所有库所有表的全部权限,密码设为 [email protected],这里唯独不包括grant的权限。
GRANT ALL PRIVILEGES ON *.* TO zhangsan@'%' IDENTIFIED BY '[email protected]';
可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个SELECT权限,然后 又给用户添加一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。
2.4. 查看权限
- 查看当前用户权限
SHOW GRANTS;

2. 查看某用户全局权限
SHOW GRANTS FOR 'user'@'主机地址'
建议大家尽量使用数据库自己的角色和用户机制来控制访问权限,不要轻易用root账号,因为root账号密码放在代码里面不安全,一旦泄露,数据库就会完全失去保护。
2.5. 收回权限
收回权限就是取消已经赋予用户的某些权限,收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL中使用REVOKE语句取消用户的某些权限,使用REVOKE收回权限之后,用户账户记录将从db、host、tables_priv和column_priv表中删除,但是用户账户记录仍然在user表中保存(删除user表中的用户信息使用DROP USER语句)。
注意:在将用户账户从user表删除之前,应该收回相应的用户的所有权限。
收回命令:
REVOKE 权限1,权限2,...,权限n ON 数据库名称.表名称 FROM 用户名称@用户地址;
举例:
#收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON *.* FROM zhang3@'%';
而且,MySQL的权限控制功能十分完善,应该尽量使用,可以提高效率,而且安全可靠。
3. 权限表
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中,MySQL数据库系统会根据这些权限表的内容为每个用户赋予相应的权限。这些权限表最重要的是user表、db表。除此之外,还有table_priv表、column_priv表和proc_priv表。在MySQL启动时,服务器将这些数据库中权限信息读入内存。
| 表名 | 描述 |
|---|---|
| user | 用户账号及权限信息 |
| global_grants | 动态全局授权 |
| db | 数据库层级的权限 |
| tables_priv | 表层级的权限 |
| columns_priv | 列层级的权限 |
| procs_priv | 存储过程和函数权限 |
| proxics_priv | 代理用户的权限 |
下面以db表为例进行说明。
其中,zhang3这个账号拥有test库下的查删改插的权限。
总结
本文详细介绍了如何给用户分配权限以及收回权限
边栏推荐
- Data warehouse interview question preparation
- 安装Mysql
- 数据仓库面试问题准备
- 第十七章 进程内存
- 数据埋点的一些问题和想法
- GCC [6] - 4 stages of compilation
- IP 实验室月复盘 · 第 5 期
- Understand chisel language thoroughly 10. Chisel project construction, operation and testing (II) -- Verilog code generation in chisel & chisel development process
- sql优化之查询优化器
- Excel quickly merges multiple rows of data
猜你喜欢
![[FAQ] summary of common causes and solutions of Huawei account service error 907135701](/img/43/1a9786c89a5ab21d1fb8903cb7b77e.png)
[FAQ] summary of common causes and solutions of Huawei account service error 907135701

Test process arrangement (3)
![Incremental ternary subsequence [greedy training]](/img/92/7efd1883c21c0e804ffccfb2231602.png)
Incremental ternary subsequence [greedy training]
![[R language data science]: cross validation and looking back](/img/a8/84a5685ebcb12d3cf8e32e1fbac053.png)
[R language data science]: cross validation and looking back
![去除重复字母[贪心+单调栈(用数组+len来维持单调序列)]](/img/af/a1dcba6f45eb4ccc668cd04a662e9c.png)
去除重复字母[贪心+单调栈(用数组+len来维持单调序列)]

DDD application and practice of domestic hotel transactions -- Code

商業智能BI財務分析,狹義的財務分析和廣義的財務分析有何不同?

MySQL之详解索引

使用CLion编译OGLPG-9th-Edition源码
![Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]](/img/af/a1dcba6f45eb4ccc668cd04a662e9c.png)
Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]
随机推荐
92.(cesium篇)cesium楼栋分层
Why should Base64 encoding be used for image transmission
What is the real meaning and purpose of doing things, and what do you really want
架构方面的进步
R语言dplyr包summarise_if函数计算dataframe数据中所有数值数据列的均值和中位数、基于条件进行数据汇总分析(Summarize all Numeric Variables)
Understand chisel language thoroughly 09. Chisel project construction, operation and testing (I) -- build and run chisel project with SBT
Use the default route as the route to the Internet
Whether the loyalty agreement has legal effect
【信息检索】链接分析
安装Mysql
gin集成支付宝支付
Use of arouter
Error in find command: paths must precede expression (turn)
Understand chisel language thoroughly 03. Write to the developer of Verilog to chisel (you can also see it without Verilog Foundation)
Incremental ternary subsequence [greedy training]
Migration from go vendor project to mod project
Test process arrangement (3)
How to package QT and share exe
按照功能对Boost库进行分类
Gorm data insertion (transfer)