MySQL 实战 45 讲
林晓斌
网名丁奇,前腾讯云数据库负责人
224874 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
实践篇 (37讲)
特别放送 (1讲)
结课测试 (1讲)
MySQL 实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

42 | grant之后要跟着flush privileges吗?

内存中修改column_priv_hash结构
修改mysql.tables_priv和mysql.columns_priv表
内存中修改acl_dbs数组
磁盘上修改mysql.db表
内存中修改acl_users数组
磁盘上修改mysql.user表
内存和数据表保持同步更新
规范地使用grant和revoke命令
导致数据表和内存数据不一致
直接操作系统权限表
数据表和内存数据不一致时使用
重建内存权限数据
内存中修改acl_users数组
磁盘上修改mysql.user表
表权限和列权限
db权限
全局权限
不需要flush privileges的情况
不规范权限操作
flush privileges命令
revoke命令
grant命令
MySQL用户权限

该思维导图由 AI 生成,仅供参考

在 MySQL 里面,grant 语句是用来给用户赋权的。不知道你有没有见过一些操作文档里面提到,grant 之后要马上跟着执行一个 flush privileges 命令,才能使赋权语句生效。我最开始使用 MySQL 的时候,就是照着一个操作文档的说明按照这个顺序操作的。
那么,grant 之后真的需要执行 flush privileges 吗?如果没有执行这个 flush 命令的话,赋权语句真的不能生效吗?
接下来,我就先和你介绍一下 grant 语句和 flush privileges 语句分别做了什么事情,然后再一起来分析这个问题。
为了便于说明,我先创建一个用户:
create user 'ua'@'%' identified by 'pa';
这条语句的逻辑是创建一个用户’ua’@’%’,密码是 pa。注意,在 MySQL 里面,用户名 (user)+ 地址 (host) 才表示一个用户,因此 ua@ip1 和 ua@ip2 代表的是两个不同的用户。
这条命令做了两个动作:
磁盘上,往 mysql.user 表里插入一行,由于没有指定权限,所以这行数据上所有表示权限的字段的值都是 N;
内存里,往数组 acl_users 里插入一个 acl_user 对象,这个对象的 access 字段值为 0。
图 1 就是这个时刻用户 ua 在 user 表中的状态。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

MySQL中grant和flush privileges命令的作用及影响是本文的重点。grant命令用于赋予用户权限,包括全局、库级、表和列权限,并对已存在的连接产生不同影响。flush privileges命令则用于重新加载权限数据,保持内存数据与磁盘数据一致。文章指出,规范使用grant和revoke语句时不需要随后加上flush privileges语句,而flush privileges适用于权限数据不一致的情况。此外,文章还提到了不规范操作可能导致的异常情况,以及在赋权时避免误用identified by '密码'的写法。作者分享了自己的经历,提醒读者在使用数据库或写代码时要注意规范操作,避免长期误用。文章内容深入浅出,为读者提供了清晰的技术指导,对于理解MySQL权限管理具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 实战 45 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • way
    写个比较小的点:在命令行查询数据需要行转列的时候习惯加个\G ; 比如slave slave stauts \G ; 后来发现 ; 是多余的。列几个常用的 \G 行转列并发送给 mysql server \g 等同于 ; \! 执行系统命令 \q exit \c 清除当前SQL(不执行) \s mysql status 信息 其他参考 \h

    作者回复: 👍 我最开始使用MySQL的时候,就是不自然的在\G后面加分号 而且还看到报错,好紧张😆

    2019-02-20
    7
    73
  • undifined
    权限的作用范围和修改策略总结: http://ww1.sinaimg.cn/large/d1885ed1ly1g0ab2twmjaj21gs0js78u.jpg

    作者回复: 👍,优秀

    2019-02-18
    8
    45
  • geraltlaush
    老师我使用delte删除用户,再创建用户都是失败,但是使用drop就可以了 mysql> create user 'ua'@'%' identified by 'L1234567890c-'; ERROR 1396 (HY000): Operation CREATE USER failed for 'ua'@'%' mysql> drop user 'ua'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> create user 'ua'@'%' identified by 'L1234567890c-'; Query OK, 0 rows affected (0.01 sec) 是不是drop才会同时从内存和磁盘删除用户信息,但是delete只是从磁盘删除

    作者回复: 对,drop是同时操作磁盘和内存, delete就是我们说的不规范操作

    2019-02-18
    2
    34
  • 发芽的紫菜
    老师,联合索引的数据结构是怎么样的?到底是怎么存的?看了前面索引两章,还是不太懂,留言里老师说会在后面章节会讲到,但我也没看到,所以来此问一下?老师能否画图讲解一下

    作者回复: 联合索引就是两个字段拼起来作索引 比如一个索引如果定义为(f1,f2), 在数据上,就是f1的值之后跟着f2的值。 查找的时候,比如执行 where f1=M and f2=N, 也是把M,N拼起来,去索引树查找

    2019-02-18
    7
    31
  • 旭东(Frank)
    老师请教一个问题:MySQL 表设计时列表顺序对MySQL性能的影响大吗?对表的列顺序有什么建议吗?

    作者回复: 没有影响 建议就是每次如果要加列都加到最后一列😆

    2019-02-18
    3
    14
  • 冰点18
    两三个月的时间,终于在上班地铁上读完了整部专栏,老师辛苦了!接下来就是搭建环境,二刷和验证了!一直有个问题,想问下老师,您用的画图工具是哪个?风格我特别喜欢,但是没找到

    作者回复: ipad 上的pencil ,是编辑小姐姐画的哈,我画的是矩形的图😅

    2019-04-10
    13
  • XD
    老师,我刚说的是acl_db,是在db切换的时候,从acl_dbs拷贝到线程内部的?类似acl_user。 session a drop user 'test'@'%'; create user 'test'@'%' identified by '123456'; grant SELECT,UPDATE on gt.* to 'test'@'%'; session b 使用test登录 use gt; session a revoke SELECT,UPDATE on gt.* from 'test'@'%'; session b show databases; //只能看到information_schema库 use gt; // Access denied for user 'test'@'%' to database 'gt' show tables; //可以看到gt库中所有的表 select/update //操作都正常

    作者回复: 你说的对,我刚翻代码确认了下,确实是特别对“当前db”有一个放过的逻辑。 多谢指正。我勘误下。

    2019-02-18
    11
  • 夜空中最亮的星
    通过老师的讲解 flush privileges 这回彻底懂了,高兴😃

    作者回复: 👍

    2019-02-18
    2
    11
  • 夹心面包
    我在此分享一个授权库的小技巧, 如果需要授权多个库,库名还有规律,比如 db_201701 db_201702 可以采用正则匹配写一条 grant on db______,每一个_代表一个字符.这样避免了多次授权,简化了过程。我们线上已经采用

    作者回复: 是的,MySQL还支持 % 赋权,%表示匹配任意字符串, 比如 grant all privileges on `db%`.* to ... 表示所有以db为前缀的库。 不过。。。我比较不建议这么用😅

    2019-02-18
    2
    8
  • 这篇容易消化,老师辛苦,你不讲这个,我想我很难发现这个细节,业务开发增删改查用的多,其他命令平时不咋用。 多玩才能发现更多好玩的,如果能有几个老师这样的朋友一起玩,那该有多好玩。

    作者回复: 👍

    2019-08-09
    6
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部