首页 > 数据库 >MYSQL访问控制,第2阶段:请求验证

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

时间:2024-12-28 16:32:00浏览次数:3  
标签:验证 访问控制 表中 Host user MYSQL 服务器 权限 priv

服务器接受连接后,进入权限控制的第二阶段。对于您通过连接发出的每个请求,服务器确定您要执行的操作,然后检查您的权限是否足够。这是授权表中的权限列发挥作用的地方。这些权限来自系统表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两种权限。您的权限可能是这样的:用户表行授予一种全局权限,而数据库表行授予另一种专门针对相关数据库的权限。在这种情况下,您拥有执行请求所需的权限,但服务器无法仅从您的全局权限或数据库权限判断出这一点。它必须基于组合权限做出访问控制决策。 

标签:验证,访问控制,表中,Host,user,MYSQL,服务器,权限,priv
From: https://blog.csdn.net/zhuguoli200851/article/details/144788300

相关文章

  • MySql B树 B+树
    什么是叶子节点?想象你有一本书,书中的每一页都是一个节点。在这本书里,有些页面包含的是目录或章节标题(这些可以类比为内部节点),而另一些页面则包含了实际的内容,比如故事、文章或者数据记录(这些是叶子节点)。叶子节点就是存储真实数据的最终位置,在树结构中它们位于最底层,没有子节......
  • MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
    Windows下有两种安装MySQL的方式:图形界面安装(.msi文件)免安装版(.zip压缩文件)MySQL下载官网:http://www.mysql.com也可前往百度网盘提取(两种安装方式文件都有):链接:https://pan.baidu.com/s/1NMRUu_E098h4ErzSXTUKgA提取码:3tfb一、MySQL免安装版配置教程http://c.bianche......
  • MySQL General error: 1364 Field 'XXX' doesn't have a default value
    向数据库中插入数据时报了以上错误,其原因为:MySQL使用了严格验证方式解决办法mysql设置的问题,有my.ini的就找这个文件,没有的就找my.cnf(这个一般都在/ect/my.conf)直接把[mysqld]模块下的sql-mode模式改变下,找到sql-mode,然后把这句删掉,改成:sql_mode=NO_ENGINE_SUBSTITU......
  • mysql 一个字段多种排序方式
    一、mysql一个字段多种排序数据idname1tkj1000020-1.11test2tkj1000020-13tkj1000020-2.1test4tkj1000020-2.2test5tkj1000020-26tkj1000020.1test7tkj1000020.1test_0018tkj1000020.2test9tkj1000020.3test10tkj1000020aest......
  • python 连接操作MySQL数据库
    安装依赖pipinstallmysql-connector-python自定义公共管理类importmysql.connectorfrommysql.connectorimportErrorclassMySQLDatabase:def__init__(self,host,database,user,password):self.host=hostself.database=database......
  • MySQL 数据库备份与恢复
    MySQL数据库的备份与恢复是确保数据安全的重要操作,以下是对这一过程的详细阐述:一、备份方式MySQL数据库的备份方式主要分为物理备份和逻辑备份两种。1.物理备份定义:直接复制数据库的物理文件(如数据文件、日志文件等)进行备份。优点:备份速度快,恢复时操作简单,占用的系统资......
  • 组件讲解-图形验证码使用(应对高并发场景)
    背景在如今越来越多人使用互联网程序的背景下,很多的项目也为了应对高并发而想出了各种应对方案,其中就包括防刷和并发缓解,不少公司为了验证不是机器人或者绑定手机号,用的是短发发送验证码的方法。这种现在基本上是通用的方案了但还有种情况,比如说热门的促销或者活动,使得大量......
  • MySQL的PRIMARY KEY的DEFAULT NULL问题
    问题展示 代码一:importpymysqlif__name__=='__main__':conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='123123',charset='utf8mb4',......
  • 基于Java+Springboot+MySQL新闻资讯网站系统设计与实现
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......
  • 深入理解 MySQL 数据库的锁机制与索引使用
    1.请说说MySQL数据库的锁?MySQL数据库中的锁机制是用来管理对数据库资源的并发访问,确保数据的一致性和完整性。不同的存储引擎可能有不同的锁实现。以下是MySQL中主要的锁类型:表级锁(Table-LevelLocking):适用于MyISAM、MEMORY等存储引擎。包括读锁(共享锁)和写锁(排他......