当前位置:网站首页>【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库下的查删改插的权限。
总结
本文详细介绍了如何给用户分配权限以及收回权限
边栏推荐
- CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)
- Understand chisel language thoroughly 10. Chisel project construction, operation and testing (II) -- Verilog code generation in chisel & chisel development process
- Use of arouter
- 按照功能对Boost库进行分类
- [FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
- 卷积神经网络经典论文集合(深度学习分类篇)
- Apple 5g chip research and development failure: continue to rely on Qualcomm, but also worry about being prosecuted?
- R language dplyr package summary_ If function calculates the mean and median of all numerical data columns in dataframe data, and summarizes all numerical variables based on conditions
- Hardware Basics - diode Basics
- 【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
猜你喜欢

Data warehouse interview question preparation

Excel quickly merges multiple rows of data

Rich text editing: wangeditor tutorial

基于51单片机的超声波测距仪

失败率高达80%,企业数字化转型路上有哪些挑战?
![[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)

C# wpf 实现截屏框实时截屏功能

Learn kernel 3: use GDB to track the kernel call chain

Excel快速合并多行数据
随机推荐
R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差
Use of arouter
富文本编辑:wangEditor使用教程
How to operate and invest games on behalf of others at sea
海外游戏代投需要注意的
瑞吉外卖笔记
LiveData
flink sql-client.sh 使用教程
Hardware Basics - diode Basics
按照功能对Boost库进行分类
sql优化之查询优化器
gin集成支付宝支付
Blob, text geometry or JSON column'xxx'can't have a default value query question
R language uses the DOTPLOT function of epidisplay package to visualize the frequency of data points in different intervals in the form of point graph, and uses the by parameter to specify the groupin
golang fmt. Printf() (turn)
Incremental ternary subsequence [greedy training]
Ruichengxin micro sprint technology innovation board: annual revenue of 367million, proposed to raise 1.3 billion, Datang Telecom is a shareholder
Understand chisel language thoroughly 09. Chisel project construction, operation and testing (I) -- build and run chisel project with SBT
安装Mysql
LifeCycle