42 | MySQL Grant赋权限(这篇文章可能没啥你想要的)

一、本篇直接进入主题吧~

1.MySQL赋权限有几个维度?分别是什么?

  • 4个,全局、DB、表、列。

2.全局权限的语法是什么?原理是什么?生效时机是什么时候?

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

  • 1)磁盘上,将 mysql.user 表里,用户’ua’@’%'这一行的所有表示权限的字段的值都修改为‘Y’;2)内存里,从数组 acl_users 中找到这个用户对应的对象,将 access 值(权限位)修改为二进制的“全 1”。

  • 命令完成后即时生效,接下来新创建的连接会使用新的权限。但是,对于一个已经存在的连接,它的全局权限不受 grant 命令的影响。

3.db权限的语法是什么?原理是什么?生效时机是什么时候?

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

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

  • acl_dbs 是一个全局数组,所有线程判断 db 权限都用这个数组,这样 revoke 操作马上就会影响到当前session。

4.表和列权限的差异和特殊点是什么?

  • 差异:表权限定义存放在表 mysql.tables_priv 中,列权限定义存放在表 mysql.columns_priv 中。这两类权限,组合起来存放在内存的 hash 结构 column_priv_hash 中。

  • 共同:跟 db 权限类似,这两个权限每次 grant 的时候都会修改数据表,也会同步修改内存中的 hash 结构。因此,对这两类权限的操作,也会马上影响到已经存在的连接。

5.flush privileges 使用场景?举例?

  • 当数据表中的权限数据跟内存中的权限数据不一致的时候,flush privileges 语句可以用来重建内存数据,达到一致状态

  • delete from mysql.user where user = 'ua'; 直接删除,会导致磁盘跟内存不一致。drop命令同时操作磁盘和内存

二、课后评论

6.MySQL常用命令(虽然很不想记,但是不记又不行)

  • \G 行转列并发送给 mysql server

  • \g 等同于 ;

  • \! 执行系统命令

  • \q exit

  • \c 清除当前SQL(不执行)

  • \s mysql status 信息

7.MySQL 表设计时列表顺序对MySQL性能的影响大吗?对表的列顺序有什么建议吗?

  • 不大

  • 每次如果要加列都加到最后一列,主从同步最后一列没有值也没关系 ,如果插入中间 会sql报错

​​​​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值