博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库内核月报 - 2015 / 10-MySQL · 特性分析 · MySQL权限存储与管理
阅读量:6979 次
发布时间:2019-06-27

本文共 1162 字,大约阅读时间需要 3 分钟。

权限相关的表

系统表

MySQL用户权限信息都存储在以下系统表中,用户权限的创建、修改和回收都会同步更新到系统表中。

mysql.user            //用户信息mysql.db              //库上的权限信息mysql.tables_priv     //表级别权限信息mysql.columns_priv    //列级别权限信息mysql.procs_priv      //存储过程和存储函数的权限信息mysql.proxies_priv    //MySQL proxy权限信息,这里不讨论

mysql.db存储是库的权限信息,不是存储实例有哪些库。MySQL查看实例有哪些数据库是通过在数据目录下查找有哪些目录文件得到的。

information_schema表

information_schema下有以下权限相关的表可供查询:

USER_PRIVILEGESSCHEMA_PRIVILEGESTABLE_PRIVILEGESCOLUMN_PRIVILEGES

权限缓存

用户在连接数据库的过程中,为了加快权限的验证过程,系统表中的权限会缓存到内存中。

例如:
mysql.user缓存在数组acl_users中,
mysql.db缓存在数组acl_dbs中,
mysql.tables_priv和mysql.columns_priv缓存在hash表column_priv_hash中,
mysql.procs_priv缓存在hash表proc_priv_hash和func_priv_hash中。

另外acl_cache缓存db级别的权限信息。例如执行use db时,会尝试从acl_cache中查找并更新当前数据库权限(thd->security_ctx->db_access)。

权限更新过程

以grant select on test.t1为例:

  1. 更新系统表mysql.user,mysql.db,mysql.tables_priv;
  2. 更新缓存acl_users,acl_dbs,column_priv_hash;
  3. 清空acl_cache。

FLUSH PRIVILEGES

FLUSH PRIVILEGES会重新从系统表中加载权限信息来构建缓存。

当我们通过SQL语句直接修改权限系统表来修改权限时,权限缓存是没有更新的,这样会导致权限缓存和系统表不一致。因此通过这种方式修改权限后,应执行FLUSH PRIVILEGES来刷新缓存,从而使更新的权限生效。

通过GRANT/REVOKE/CREATE USER/DROP USER来更新权限是不需要FLUSH PRIVILEGES的。

当前连接修改了权限信息时,现存的其他客户连接是不受影响的,权限在客户的下一次请求时生效。

转载地址:http://cgypl.baihongyu.com/

你可能感兴趣的文章
大数据处理也要安全--关于MaxCompute的安全科普
查看>>
Django使用数据库(Mariadb/Mysql)
查看>>
广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理
查看>>
在macos上基于python2.7安装PyQt5
查看>>
69亿美元英伟达史上最大收购!这家基金又赢了
查看>>
阿里云双12服务器和阿里云双12数据库活动又开始了
查看>>
百度成立小度蓝牙联盟,DMA+小度App打造蓝牙语音风口
查看>>
第二十章:异步和文件I/O.(十三)
查看>>
第四范式完成C轮融资,金额超10亿元
查看>>
Java图形化:布局方式
查看>>
python 帮助文档、自我解释
查看>>
helm安装配置
查看>>
离线安装k8s 1.9.0
查看>>
my项目的总结2015.8.26编
查看>>
Linux 基金会宣布红队项目,致力于孵化开源安全工具
查看>>
索尼发布无人机相机专利,支持眼部对焦
查看>>
js字符串方法
查看>>
sql server几种读写分离方案的比较
查看>>
Ubuntu阿里云搭建Mono.net环境
查看>>
一对一直播app源码功能操详解方案分享
查看>>