03.12 Day 53 - grant 和 flush privileges 语句

news/2024/5/18 6:43:00

大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 53 天,也是我第 115 次进行这种操作。

今天我温习了该专栏里一篇叫《grant之后要跟着flush privileges吗?》的文章。

关键词总结:创建用户命令的两个动作、全局权限(grant 命令的两个动作、grant 命令的分析结果、回收 grant 语句赋予的权限、revoke 命令的两个动作)、db 权限(库级别 grant 命令的两个动作)、表权限和列权限(两类权限的赋予命令、不需要执行 flush privileges 命令的场景)、flush privileges 使用场景(删除用户后内存数据还存在的结果)。

 

所学总结:

 

创建用户命令的两个动作

create user 'ua'@'%' identified by 'pa';
  • 在磁盘上,往 mysql.user 表里插入一行,但由于没有指定权限,所以该行数据上所有与权限有关的字段值都为 'N'
  • 在内存里,往数组 acl_users 里插入一个 acl_user 对象,该对象的 access 字段值为 0
     

全局权限

grant all privileges on *.* to 'ua'@'%' with grant option;

grant 命令的两个动作

  1. 在磁盘上,将 mysql.user 表里用户 'ua'@'%' 行的所有与权限相关的字段值都改为 'Y'
  2. 在内存里,从数组 acl_users 中找到该用户对应的对象,将 access 值(权限位)改为二进制的 “全 1”。

grant 命令的分析结果

  1. grant 命令对于全局权限,同时更新了磁盘和内存。命令完成后即时生效,接下来新创建的连接会使用新的权限;
  2. 对于一个已经存在的连接,它的全局权限不受 grant 命令的影响。

回收 grant 语句赋予的权限

revoke all privileges on *.* from 'ua'@'%';

revoke 命令的两个动作

  1. 在磁盘上,将 mysql.user 表里用户 'ua'@'%' 行的所有与权限相关的字段值都改为 'N'
  2. 在内存里,从数组 acl_users 中找到该用户对应的对象,将 access 的值修改为 0
     

db 权限

grant all privileges on db1.* to 'ua'@'%' with grant option;

库级别 grant 命令的两个动作

  1. 在磁盘上,往 mysql.db 表中插入了一行记录,所有权限位字段设置为 'Y'
  2. 在内存里,增肌一个对象到数组 acl_dbs 中,该对象的权限位为 “全 1”。
     

表权限和列权限

两类权限的赋予命令

create table db1.t1(id int, a int);

grant all privileges on db1.t1 to 'ua'@'%' with grant option;
GRANT SELECT(id), INSERT (id,a) ON mydb.mytbl TO 'ua'@'%' with grant option;

不需要执行 flush privileges 命令的场景

  • 内存的权限数据和磁盘数据表相同的情况;
  • 使用 grant/revoke 语句时,因为内存和数据表本来就是保持同步更新的;
  • 正常情况下,grant 命令之后没有必要跟着执行 flush privileges 命令。
     

flush privileges 使用场景

删除用户后内存数据还存在的结果

由于在事务三时直接删除了数据表的记录,而内存的数据还在:

  1. 事务四时给用户 ua 赋权失败,因为 mysql.user 表中找不到该行记录;
  2. 而事务五时要重新创建该用户也不行,因为在做内存判断时,会认为该用户还存在。

 

末了

重新总结了一下文中提到的内容:MySQL 用户权限在数据表和内存中的存在形式、grant 和 revoke 命令的执行逻辑、规范地使用 grant 和 revoke 语句时不需要后跟 flush privileges 语句、flush privileges 语句本身会用数据表的数据重建一份内存权限数据。


http://www.niftyadmin.cn/n/1895483.html

相关文章

73. 进程管理 - pmap 和 pstree 查看进程内存映射或进程树

开篇词 pmap 和 pstree 让我们可以查看进程的内存映射或树形显示进程信息。 选项 pmap 命令选项 这里是 pmap 命令的一些选项: 选项描述-x 或 --extended显示扩展格式。-d 或 --device显示设备格式。-q 或 --quiet隐藏头即脚信息。-A 或 --range low,high限制…

Baeldung Java 周评 | 第七十二弹(关键词:清理 ThreadLocal、集合转换、终极 JSON 库、Hibernate 读写缓存并发策略工作原理、JPA 原生 API 类型安全检查)

开篇词 尤金的第 72 篇 Java 周评,诞生了! Spring 以及 Java 相关 Spring 框架 4.2 进入 RC1 是的,Spring 4.2 在野外首次发布了候选版本。 我很兴奋的一件事是更好的事件支持。清理 ThreadLocal 何时使用(何时避免使用&…

SpringBoot 2 使用 Restdocs 创建 API 文档

开篇词 该指南将引导你在 Spring 应用中为 HTTP 端点生成文档。 你将创建的应用 我们将使用一些暴露 API 的 HTTP 端点构建一个简单的 Spring 应用。我们将使用 JUnit 和 Spring 的 MockMvc 仅测试网络层。然后,我们将使用相同的测试通过 Spring REST Docs 生成…

linux环境手动编译安装Nginx实践过程 附异常解决

为什么选择Nginx Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性: 在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢…

03.13 Day 54 - 临时表

大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 54 天,也是我第 116 次进行这种操作。 今天我温习了该专栏里一篇叫《为什么临时表可以重名?》的文章。 关键词总结:内存表和…

第一周 机器学习(ML)策略(1):1.4 满足和优化指标

目录 第一章、简介 第二章、满足和优化指标 2.1、 比单实数评估指标更好的指标 单实数评估指标(见上一篇文章)并不是万能的,在很多场景并不是适用,所以本文引入别的指标。 2.2、满足指标(即约束条件)与优化指标(即效益函数)的提出 2.3、满足指标(即…

Builder模式在Java中的应用

在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较…

H264/AVC 参考图像管理

参考图像顺序 264中,已编码图像存储在编码器和解码器的参考缓冲区(DPB,解码图像缓冲区),并由相应的参考图像列表list0,以供帧间宏块的运动补偿预测使用。对B片预测而言,list0和list1分别包含当…