当前位置: 首页 > news >正文

grant之后还需要跟flush privilege吗?

前言

grant之后其实并不需要跟flush privilege来刷新权限


grant之后还需要跟flush privilege吗?

  • 前言
  • grant命令
  • grant的操作流程
  • 读取全局权限的流程
  • 库级权限
  • 表和行权限
  • flush privilege
    • 所以grant之后还需要跟flush privilege吗?

grant命令

grant命令是用来给数据库添加权限的,

mysql中可以直接添加全局权限,库权限,表以及行权限

grant的操作流程

假如创建了一个用户ua,

那么就会在数据库的user表中创建这个用户,然后会在内存数组acl_user表中添加这个用户信息。如果没有权限那么所有表示权限的列都是N,

使用grant命令添加所有权限之后就会更新数据库这个user表和内存数组acl_user。

读取全局权限的流程

一个线程连接之后会把内存数组中这个用户acl_user的权限复制到线程内存中。所以全局权限如果修改之后,已经连接的线程并不能立马感知。

只有新连接的线程才会使用新的连接。

库级权限

那么对于库级权限存储在mysql.db表中和acl_dbs内存数组中,执行grant添加库权限的逻辑和全局权限相同。

只不过线程判断权限时都会使用这个内存数组acl_dbs判断,

所以修改权限之后,线程立马可以感知到。

但是这里有一个有趣的逻辑,

就是如果这个线程已经进入了这个db,比如执行了use db1,那么权限就会保存在这个线程的会话中,就感知不到内存数组中对这个acl_dbs的权限操作了。只有退出这个db之后才会发现权限的变更。

表和行权限

对于表和行权限保存在mysql.tables_priv和mysql.cloum_priv表中,和内存都保存在cloum_priv_hash中,

执行grant命令和变更时机和db类似。

flush privilege

flush privilege 命令是用来刷新权限缓存的,就是我们上面提到的各级权限都会在内存中存储一份,就是用来使的内存中的权限数据失效,然后从db中重新加载到内存中。例如:用来删除acl_user表中的数据,然后重新加载磁盘中的user表数据的。

所以grant之后还需要跟flush privilege吗?

答案是 不用的。

因为我们上的grant命令,会直接修改内存和db中的权限数据。

那么flush privilege什么时候执行呢?

一般是在错误的操作mysql权限表导致数据不一致而发生错误时使用。

比如使用了delect 命令删除了user表中的用户,当给用户添加权限时会报找不到这个用户。重新添加这个用户的时候,由于内存数组acl_user中存在导致添加不通过.

如果你直接通过 UPDATEINSERT 等操作修改了 mysql.usermysql.db 等系统权限表,MySQL 默认不会立即重新加载权限数据,因此需要手动执行 FLUSH PRIVILEGES 来使改动生效。

http://www.dtcms.com/a/268757.html

相关文章:

  • 广告系统中的RTB详解
  • IT 与动环一体化运维的技术融合实践
  • Pandas 学习(数学建模篇)
  • 牛客周赛 Round 99题解
  • C++ --- list的简单实现
  • 沙箱逃逸漏洞
  • STEP 7 MicroWIN SMART V2.2 的详细安装步骤及注意事项
  • 股票筹码分布及其数据获取
  • validate CRI v1 image API for endpoint “unix:///run/containerd/containerd.sock“
  • 代码详细注释:递归查找指定目录及其子目录中的所有BMP位图文件,并通过双重验证确保找到的文件确实是合法的BMP文件。以下是详细的功能说明:DIY机器人工房
  • Maven 私库
  • [特殊字符] Excel 读取收件人 + Outlook 批量发送带附件邮件 —— Python 自动化实战
  • pyautogui库的一些鼠标操作
  • 医学 LLM 评估相关论文笔记
  • OSPF路由过滤
  • 【python实用小脚本-130】基于 Python 的 HTML 到 Markdown 转换工具:实现高效文档格式转换
  • 深度学习7(梯度下降算法改进)
  • SLAM文献之Efficient and Consistent Bundle Adjustment on Lidar Point Clouds(BALM)
  • 安卓10.0系统修改定制化____实现自动开启 USB 调试​的步骤解析 列举常用的几种修改方法
  • 【氮化镓】​​GaN帽层对HEMTs栅极漏电机制的影响
  • LeetCode 2099.找到和最大的长度为 K 的子序列:自定义排序
  • 前端篇——HTML知识点体系
  • 解决jenkins的Exec command命令nohup java -jar不启动问题
  • 订单初版—1.分布式订单系统的简要设计文档
  • Vue 2 vs Vue 3:核心区别详解与升级指南
  • 使用ansible的角色实现批量安装nginx服务
  • ReAct (Reason and Act) OR 强化学习(Reinforcement Learning, RL)
  • [特殊字符] Python 实战 | 批量统计中文文档词频并导出 Excel
  • iOS 出海 App 安全加固指南:无源码环境下的 IPA 加固与防破解方法
  • Spring的Bean原型模式下的使用