当前位置:网站首页>【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库下的查删改插的权限。
总结
本文详细介绍了如何给用户分配权限以及收回权限
边栏推荐
- The mouse wheel of xshell/bash/zsh and other terminals is garbled (turn)
- 富文本编辑:wangEditor使用教程
- Test process arrangement (2)
- 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
- 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
- R语言使用lattice包中的bwplot函数可视化箱图(box plot)、par.settings参数自定义主题模式
- Idea shortcut keys
- Can mortgage with housing exclude compulsory execution
- Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
- IP lab monthly resumption · issue 5
猜你喜欢
去除重複字母[貪心+單調棧(用數組+len來維持單調序列)]
docker-compose公网部署redis哨兵模式
Incremental ternary subsequence [greedy training]
安装Mysql
Why should Base64 encoding be used for image transmission
Unity Shader学习(三)试着绘制一个圆
sharding key type not supported
Understand chisel language thoroughly 12. Chisel project construction, operation and testing (IV) -- chisel test of chisel test
MySQL之详解索引
Leetcode 61: 旋转链表
随机推荐
【信息检索】分类和聚类的实验
Understand chisel language thoroughly 04. Chisel Foundation (I) - signal type and constant
统计php程序运行时间及设置PHP最长运行时间
IP lab monthly resumption · issue 5
Yingshi Ruida rushes to the scientific and Technological Innovation Board: the annual revenue is 450million and the proposed fund-raising is 979million
Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]
R语言ggplot2可视化:gganimate包创建动态折线图动画(gif)、使用transition_reveal函数在动画中沿给定维度逐步显示数据
Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
ML之shap:基于boston波士顿房价回归预测数据集利用Shap值对LiR线性回归模型实现可解释性案例
Leetcode 61: 旋转链表
[R language data science]: cross validation and looking back
Assertion of unittest framework
Migration from go vendor project to mod project
Fs4059c is a 5V input boost charging 12.6v1.2a. Inputting a small current to three lithium battery charging chips will not pull it dead. The temperature is 60 ° and 1000-1100ma is recommended
Why should Base64 encoding be used for image transmission
AI与生命科学
2022 practice questions and mock exams for the main principals of hazardous chemical business units
R language uses the mutation function of dplyr package to standardize the specified data column (using mean function and SD function), and calculates the grouping mean of the standardized target varia
Innovation and development of independent industrial software
sharding key type not supported