MYSQL访问控制,第2阶段:请求验证

embedded/2025/1/2 5:36:51/

服务器接受连接后,进入权限控制的第二阶段。对于您通过连接发出的每个请求,服务器确定您要执行的操作,然后检查您的权限是否足够。这是授权表中的权限列发挥作用的地方。这些权限来自系统表userglobal_grantsdbtables_privcolumns_privprocs_priv

user表和global_grants表授予全局特权。这些表中给定帐户的行记录表示在全局基础上适用的帐户权限,而无论默认数据库是什么。例如,如果user表授予您DELETE权限,您可以从服务器主机上任何数据库的任何表中删除行。明智的做法是将user表中的特权只授予需要它们的人,例如数据库管理员。对于其他用户,将user表中的所有权限设置为'N'

db表授予特定于数据库的权限。此表的范围列中的值可以采用以下形式:

  • 空白用户值与匿名用户匹配。非空白值从字面上匹配;用户名中没有通配符。
  • 通配符%和_可以在Host和Db列中使用。它们与使用LIKE运算符执行的模式匹配操作具有相同的含义。如果您想在授予权限时按字面意思使用任一字符,则必须使用反斜杠来转义。例如,要将下划线字符(_)作为库名的一部分,请在GRANT语句中将其指定为\_。
  • 一个'%'或空白Host值表示任何主机。
  • 一个'%'或空白Db值表示任何数据库

服务器将db表读入内存,并在读取user表的同时对其进行排序。服务器根据HostDbUser范围列对db表进行排序。与user表一样,排序将最具体的值放在首位,最不具体的值放在最后,当服务器查找匹配的行时,它使用找到的第一个匹配行。

tables_privcolumns_privprocs_priv表授予特定于表、特定于列和特定于例程的权限。这些表的范围列中的值可以采用以下形式:

  • 通配符%_可以在Host列中使用。它们与使用like运算符执行的模式匹配操作具有相同的含义。

  • 一个'%'或空白Host值表示任何主机。
  • 在DbTable_nameColumn_nameRoutine_name列中不能包含通配符或为空。

服务器根据columns_priv列对HostDbUsertables_priv表进行排序。这类似于procs_privdb表排序,但更简单,因为只有Host列可以包含通配符。

服务器使用排序后的表来验证它收到的每个请求。对于需要shutdown或reload等管理权限的请求,服务器只检查user和global_privilege表,因为它们是唯一指定管理权限的表。如果这些表中的帐户行权限允许请求的操作,则服务器会授予访问权限,否则拒绝访问。例如,如果您想执行mysqladmin shutdown,但您的user表行没有授予您shutdown权限,服务器甚至不检查db表就拒绝访问(后一个表不包含Shutdown_priv列,因此无需检查。)

对于与数据库相关的请求(INSERT、UPDATE等),服务器首先检查用户在user表行中的全局权限(减去部分撤销施加的任何权限限制)。如果该行允许请求的操作,则授予访问权限。如果user表中的全局权限不足,则服务器从db表中确定用户的数据库特定权限:

  • 服务器在db表中查找HostDbUser列的匹配。

  • HostUser列与连接用户的主机名和MySQL用户名匹配。

  • Db列与用户想要访问的数据库相匹配。

  • 如果HostUser没有对应的权限记录,则拒绝访问。

确定db表行授予的数据库特定权限后,服务器将它们添加到user表授予的全局权限中。如果结果允许所请求的操作,则授予访问权限。否则,服务器依次检查用户表和tables_privcolumns_priv表中的列权限,将这些权限添加到用户权限中,并根据结果允许或拒绝访问。对于存储过程操作权限,服务器使用procs_priv表而不是tables_privcolumns_priv

用布尔术语表示,前面关于如何计算用户权限的描述可以总结如下:

global privileges
OR database privileges
OR table privileges
OR column privileges
OR routine privileges

如果最初发现全局权限不足以执行请求的操作,则服务器稍后将这些权限添加到数据库、表和列权限,这些行为看起来可能不太直观,我们来解释一下,如果执行INSERT INTO… SELECT语句,则需要INSERT和SELECT两种权限。您的权限可能是这样的:用户表行授予一种全局权限,而数据库表行授予另一种专门针对相关数据库的权限。在这种情况下,您拥有执行请求所需的权限,但服务器无法仅从您的全局权限或数据库权限判断出这一点。它必须基于组合权限做出访问控制决策。 


http://www.ppmy.cn/embedded/150153.html

相关文章

<数据集>风力发电机损伤识别数据集<目标检测>

数据集下载链接 <数据集>风力发电机损伤识别数据集<目标检测>https://download.csdn.net/download/qq_53332949/90187097数据集格式:VOCYOLO格式 图片数量:2527张 标注数量(xml文件个数):252…

Spring MVC实战指南:构建高效Web应用的架构与技巧(一)

三层架构和MVC 三层架构 开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序。 Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构 表现层:springmvc框架,单例的&#xff…

【设计模式】装饰器模式(Decorator Pattern)

定义 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式。 装饰器模式通过创建一个装饰类&#xff0c;包装原始对象&#xff0c;并在保持原始对象接口不变的情况下&#xff0c;扩展其功能。 模式示例 #include <iostream> #include <strin…

pytorch nn.Parameter模块介绍

在 PyTorch 中&#xff0c;nn.Parameter 是一个用于定义可训练参数的模块。它通常用于自定义模型时&#xff0c;将张量注册为模型的一部分&#xff0c;使其在训练过程中能够被优化。 nn.Parameter 的作用 可训练性&#xff1a;将一个普通张量转换为 Parameter 后&#xff0c;…

【HENU】河南大学计院2024 操作系统 简答题复习

和光同尘_我的个人主页 一直游到海水变蓝。 单项选择 15x2 30 判断 10x1 10 简答 3x10 30 综合 3x10 30 简答题 简述操作系统的四个基本特征。 并发性 共享性 虚拟性 异步性 并发性是最重要特性&#xff0c;其它三种特性以此为前提。 并发 并发(Concurrence)&#…

2.5.3 文件使用、共享、保护、安全与可靠性

文章目录 文件使用文件共享文件保护系统安全与可靠性 文件使用 操作系统向用户提供操作级、编程级文件服务。 操作级服务包括目录管理&#xff0c;文件操作&#xff08;复制、删除、修改&#xff09;&#xff0c;文件管理&#xff08;设置文件权限&#xff09;。 编程级服务包括…

sqlalchemy-access库操作MS Access

因目前项目中数据处理的量稍大&#xff0c;为了方便和业务进行交互&#xff0c;对数据的加工和处理放到微软桌面数据库MS Access中。然后有些地方通过 Python 来操作 MS Access 数据库&#xff0c;用到 sqlalchemy-access库。本文对操作的要点做简单的描述。 之前写过一篇 Pyt…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…