MySQL 权限表在数据库启动时载入内存,用户通过身份认证后,系统会在内存中进行相应权限的存取。当 MySQL 允许一个用户执行各种操作时,它将首先核实该用户向 MySQL 服务器发送的连接请求,然后确认用户的操作请求是否被允许。

当用户进行连接时,MySQL 实现权限控制主要有以下两个阶段:

1)连接核实阶段

登录 MySQL 服务器时,客户端连接请求中会提供用户名称、主机地址和密码,MySQL 服务器会使用 user 表中的 Host、User 和 authentication_string (MySQL 5.7 版本之前是 Password)字段执行身份检查。

只有客户端请求的主机名和用户名在 user 表中有匹配的记录,并且密码正确时,MySQL 服务器才会通过身份认证,接受连接,否则拒绝连接。
MySQL 通过 IP 地址和用户名联合进行身份认证。例如 MySQL 安装后默认创建的用户 root@localhost,表示用户 root 只能从本地(localhost)进行连接时才能通过认证。此用户从其它任何主机对数据库进行连接时都将被拒绝。也就是说,用户名相同,IP 地址不同,MySQL 则将其视为不同的用户。

服务器接受连接后进入请求核实阶段等待用户请求。如果连接核实没有通过,服务器则完全拒绝访问。

2)请求核实阶段

建立连接后,服务器进入请求核实阶段,对在此连接上的每个请求,服务器都会检查用户是否有足够的权限来执行它。这正是授权表中的权限列发挥作用的地方。

权限按照以下权限表的顺序得到数据库权限:user→db→tables_priv→columns_priv→procs_priv。在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。

请求核实的过程如下所示:

1)用户向 MySQL 发出操作请求。

2)MySQL 首先检查 user 表,匹配 User、Host 字段值,查看请求的全局权限在 user 表中是否被授权。授权则允许操作执行,如果指定的权限在 user 表中没有被授权。MySQL 将检查 db 表。

3)db 表是下一安全层级,其中的权限限定于数据库层级,在该层级的 SELECT 权限允许用户查看指定数据库的所有表中的数据。

MySQL 检查 db 权限表中的权限信息,匹配 User、Host 字段值,查看请求的数据库级别的权限在 db 表中是否被授权。授权则允许操作执行,否则 MySQL 继续向下查找。

4)MySQL 检查 tables_priv 权限表中的权限信息,匹配 User、Host 字段值,查看请求的数据表级别的权限在 tables_priv 表中是否被授权。授权则允许操作执行,否则 MySQL 继续向下查找。

5)MySQL 检查 columns_priv 权限表中的权限信息,匹配 User、Host 字段值,查看请求的列级别的权限在 columns_priv 表中是否被授权。授权则允许操作执行,否则 MySQL 继续向下查找。

6)如果所有权限表都检查完毕,还是没有找到允许的权限操作,那么 MySQL 将返回错误信息,即用户请求的操作不能执行,操作失败。
提示:上面提到 MySQL 通过向下层级的顺序检查权限表,但并不意味着所有的权限都要执行该过程。例如,一个用户登录到 MySQL 服务器之后只执行对 MySQL 的管理操作,此时只涉及管理权限,因此 MySQL 只检查 user 表。

10、MySQL权限控制实现原理相关推荐

  1. Mysql权限系统工作原理(转)

    Mysql权限系统工作原理: MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情.当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和 ...

  2. grant 1.0 mysql 权限系统工作原理

    文章目录 一.权限系统作用 二.工作原理 授权表 刷新和查看权限表 一.权限系统作用 MySQL 权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的 SELECT.INSER ...

  3. php授权系统原理,Mysql权限系统工作原理-PHP教程,PHP基础

    权限系统工作原理 mysql权限系统保证所有的用户可以严格地做他们假定被允许做的事情.当你连接一个mysql服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来 ...

  4. Mysql权限控制-允许用户远程链接

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  5. Mysql权限控制 - 允许用户远程连接

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  6. mysql权限控制禁止用户远程连接_mysql权限控制—新建用户允许其远程连接

    mysql为了保证安全性,在默认情况下,只允许在本地登录,在日常工作中,经常会需要用户远程连接使用该数据库,因此便需要创建新的用户,给其分配相应的权限,如下: 注:关键字都应该大写,尽量养成好习惯 创 ...

  7. @PreAuthorize 权限控制的原理

    @PreAuthorize 注解,顾名思义是进入方法前的权限验证,@PreAuthorize 声明这个方法所需要的权限表达式,例如:@PreAuthorize("hasAuthority(' ...

  8. SAP CDS view权限控制实现原理介绍

    Part1 – how to test odata service generated by CDS view Part2 – what objects are automatically gener ...

  9. mysql权限系统的工作原理_Mysql权限系统工作原理

    MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情.当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限. MyS ...

最新文章

  1. 2022-2028年中国气相防锈薄膜行业市场发展调研及投资前景分析报告
  2. 周志华:最新实验表明gcForest已经是最好的非深度神经网络方法
  3. Asterisk realtime 之SIP用户动态写入mysql 数据库
  4. 去除html,获取某个标签里面内容
  5. java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava
  6. 第2章[2.5] Ext JS组件、容器与布局
  7. svn: 无法连接主机“127.0.0.1”: 拒绝连接
  8. 买东西被拒收现金?央行刚刚发话了:必须这样!
  9. (day 47 - 位运算 ) 剑指 Offer 65. 不用加减乘除做加法
  10. 第九周-每周例行报告
  11. 如何进阶一名有竞争力的程序员? 1
  12. SpringBoot项目文件上传
  13. 511遇见易语言大漠多线程模块教程(1-12课)
  14. C语言打印出心形表白,初学C语言也能看懂!!
  15. oracle异步备份,网络存储导论第七章:异步数据复制容灾方式
  16. 【BZOJ3654】图样图森破【最长路】【后缀数组】【ST表】【回文串】【LCP】
  17. Kata 在 Kubernetes 中的网络模型
  18. (16)全民小视频引流脚本模块化开发10-发送图片私信By飞云脚本学院
  19. 2.4 旋转曲面 (2)
  20. 数值修约程序(包括运算过程有效数字保留,Python3实现)

热门文章

  1. os_mbox.c(全)
  2. 【构建之法教学项目】一个简单的基于C#的电子商务系统演练场景的代码示例...
  3. shp文件导入数据库
  4. 第二次做HDOJ 1051
  5. React的核心概念
  6. HDU 5274 Dylans loves tree(树链剖分)
  7. 结对项目之需求分析与原型设计
  8. 关于Exception类
  9. 官方文档翻译-ESP32-High Resolution Timer
  10. V3S文件系统基本构架