一文读懂mysql权限系统
前言:
MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。
mysql赋权限操作:
谈到mysql权限,在工作中第一个想到的就是给用户设置允许外部连接的权限,因为要使用类似navicat的图形化工具,更加方便更加简便快捷的操作数据库。操作也很简单以root用户为例,分三个步骤,分别是
1、设置mysql数据库中user表host字段为%,如下图

2、赋予root 用户权限
grant all privileges on *.* to ‘root’@’%’ with grant option
3、刷新
flush privileges;
做完这些,就可以使用图形化工具连接mysql了。
但是今天同事在安装的时候出现了一个问题,就是安装过后,不用上面的操作依然可以连接,按道理来讲肯定是行不通的,这简直颠覆了信仰......所以怀疑是不是有缓存什么的,所以又是一顿刷新缓存,重启服务
但结果仍然可以正常链接,折腾了半天才发现原来配置文件中有这么一句配置

"取消密码验证" 第一想法感觉只是取消了密码验证而已,和用户的远程连接应该没关系,但是结果很意外,于是关闭又开启这个配置后果然,外部链接的权限也跟着关闭和开启。
为了进一步搞清楚问题所在,查询了mysql的官方文档(文档是真心乱)发现原来 skip-grant-tables 不是取消密码验证的意思,官网解释如下

于是才知道skip-grant-tables 是关闭mysql的权限系统~~~不单单是密码验证,因为根本需要验证了。
mysql权限系统工作思路:
那么mysql的权限系统到底是怎么工作的?下面也整理了一些个人的理解。mysql对于权限的控制分为两个阶段。
阶段1、服务器检查是否允许你连接。
阶段2:假定你能连接,服务器检查你的操作权限
先看下面一张图

流程图很清楚的解释了权限体系的流程mysql在定义权限的时候是跟你用户名和网络地址来形成权限集的,就是说允许tom从不同的主机拥有不同的mysql权限,换句话说,就是不同主机的tom可能不是同一个人,所以就不能拥有同一个权限集了
而权限集的表主要由MySQL库中 user,db ,host三张表组成
|
表名 |
user |
db |
host |
|
列范围 |
Host |
Host |
Host |
|
User |
Db |
Db |
|
|
Password |
User |
1、user 表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。
2、db 表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。
3、host表不受GRANT和REVOKE语句的影响。大多数MySQL安装根本不需要使用该表
4、tables_priv和columns_priv表可以对表和列提供更精确的权限控制
举个例子,user表中host为192.168.0.1 user为 lisi ,db表中同样会存有 host为192.168.0.1 user为 lisi 的记录,Db的值则为该用户可以操作的数据库,至此最上面设置mysql数据库中user表host字段为%的操作就很好理解了,就是允许所有的root用户以所有ip连接mysql服务
当用户有权限连接到mysql后,会从内存中加载到上述几个表中的权限集,进行权限控制,如果更新了某个用户的权限,则需要刷新缓存也就是最上面将的第三步
最后说下第二步操作 grant all privileges on *.* to ‘root’@’%’ with grant option ;整条语句唯一需要解释的就是 *.* 这一处,这一处代表的是操作的层级,通俗的讲就是权限在表层级,字段层级,还是库的层级,
那么层级可以具体划分如下:
| 层级 | 范围 | 所在位置 | 授予语法 | 撤销语法 |
| 全局层级 | 所有数据库 | mysql.user | GRANT ALL ON *.* | REVOKE ALL ON *.* |
| 数据库层级 | 指定数据库 | mysql.db和mysql.host | GRANT ALL ON db_name.* | REVOKE ALL ON db_name.* |
| 表层级 | 给定表中的所有列 | mysql.talbes_priv | GRANT ALL ON db_name.tbl_name | REVOKE ALL ON db_name.tbl_name |
| 列层级 | 给定表中的单一列 | mysql.columns_priv | GRANT ALL ON db_name.tbl_name.col | REVOKE ALL ON db_name.tbl_name.clo |
| 子程序层级 | 一个已存储的函数或一个已存储的过程时 |
总结:
在使用数据库的时候,对赋予用户的权限一定要细致和慎重,不建议用%和*.*来给与普通用户操作,同样对root用户也是如此。毕竟数据的安全是很重要的。
一文读懂mysql权限系统的更多相关文章
- 一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...
- 一文读懂MySQL的索引结构及查询优化
回顾前文: 一文学会MySQL的explain工具 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) MySQL官方文档中(https://dev.m ...
- 一文读懂MySql主从复制机制
作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得 ...
- 一文读懂 MySQL 索引
1 索引简介 1.1 什么是 MySQL 的索引 官方定义:索引是帮助 MySQL 高效获取数据的数据结构 从上面定义中我们可以分析出索引本质是一个数据结构,他的作用是帮助我们高效获取数据,在正式介绍 ...
- 大数据篇:一文读懂@数据仓库(PPT文字版)
大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...
- 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...
- [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路 http://www.52im.net/thread-1709-1-2.html 本文原作者阮一峰,作者博客:r ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- 一文读懂Java动态代理
作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...
随机推荐
- 查找局域网中未知设备的IP
先运行net view,然后再运行arp -a 设备启动前后对比IP列表
- typora 基本使用和漂亮的主题样式
以下是使用博客园的markdown的效果: typora 基本使用和漂亮的主题样式 一.typora 基本使用 ps:文字排版,使用markdown nice 可以一键复制到公众号.知乎:https: ...
- 【LeetCode】970. Powerful Integers 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力搜索 日期 题目地址:https://leetc ...
- 【LeetCode】744. Find Smallest Letter Greater Than Target 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线性扫描 二分查找 日期 题目地址:https:// ...
- 【LeetCode】396. Rotate Function 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/rotate-fu ...
- A. Points on Line
A. Points on Line time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 【剑指Offer】字符流中第一个不重复的字符 解题报告(Python)
[剑指Offer]字符流中第一个不重复的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...
- uniapp h5中解决跨域问题
"h5": { "title": "互联云玺", "template": "", "rou ...
- 编写Java程序,中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝参见玉帝,而每一天参
查看本章节 查看作业目录 需求说明: 中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝 ...
- 【】JSON介绍
0.说明 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写. 同时也易于机器解析和生成. 它是基于JavaScript Programm ...