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

news2025/1/2 22:16:33

服务器接受连接后,进入权限控制的第二阶段。对于您通过连接发出的每个请求,服务器确定您要执行的操作,然后检查您的权限是否足够。这是授权表中的权限列发挥作用的地方。这些权限来自系统表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.coloradmin.cn/o/2268181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

王佩丰24节Excel学习笔记——第十八讲:Lookup和数组

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 地址栏公式可以使用 F9 查看,取消请按Esc键,或者公式前的红色叉;使用数组时一定要注意使用绝对引用,方便下拉;使用数组时一…

【hackmyvm】hacked靶机wp

tags: HMVrootkitDiamorphine Type: wp 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. 获取参数 3. 提权 靶机链接 https://hackmyvm.eu/machines/machine.php?vmHacked 作者 sml 难度 ⭐️⭐️⭐️⭐️️ 2. 信息收集 2.1. 端口扫描…

【超级详细】七牛云配置阿里云域名详细过程记录

0. 准备一个阿里云域名,记得要备案!!!! 1. 创建七牛云存储空间 首先,登录七牛云控制台,创建一个新的存储空间(Bucket)。这个存储空间将用于存放你的文件,并…

【JDBC】转账案例

回顾 使用工具类查询表 需求: 查询student表的所有数据,把数据封装到一个集合中 数据准备 #创建表 CREATE TABLE student( sid INT, name VARCHAR(100), age INT, sex VARCHAR(100) ) #插入数据 INSERT INTO student VALUES(1,张三,18,女),(2…

HTML——14. 超链接四种状态

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>超链接</title></head><body><a href"https://ai.m.taobao.com" target"_blank">淘宝</a><br /><a href"…

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

MusicFree - 免费播放全网歌曲!无广告开源网络音乐聚合播放器 (安卓电脑版)

大家平常听歌可能都会在 QQ 音乐、网易云音乐、酷狗、喜马拉雅等不同平台来回切换&#xff0c;体验其实很烦。曾经推荐过不少“聚合”音乐应用&#xff0c;比如 洛雪音乐助手、Listen1 等等。 最近又有一个新选择了&#xff01;MusicFree 是一款免费开源清爽无广告的音乐播放器…

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…

代码随想录算法【Day1】

Day1 1.掌握二分法边界值判断&#xff0c;是根据写法来的; 2.删除数组元素的双指针和暴力解法; 3.灵活使用双指针方法 704 二分法 以前对于边界的问题非常纠结&#xff0c;到底是<还是<&#xff0c;以及是mid还是mid-1。 通过视频讲解&#xff0c;得知二分法的两种…

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据&#xff1a;使用Python爬虫技术 在数字化的浪潮中&#xff0c;数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台&#xff0c;汇聚了海量的技术博客与文章&#xff0c;成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…

实战案例——ZooKeeper集群部署(新手教程超详细)

案例目标 了解ZooKeeper分布式应用程序协调服务使用3台机器搭建ZooKeeper集群使用ZooKeeper集群 案例分析 规划节点 ZooKeeper集群节点规划 Ip 主机名 节点 192.168.110.10 zookeeper1 集群节点 192.168.110.20 zookeeper2 集群节点 192.168.110.30 zookeeper3 …

如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈

如果你的网站是h5网站&#xff0c;如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈 h5如何转小程序 如果当年你们开发网站是用的h5但是没有开发小程序&#xff0c;也没有使用uniapp这样的混开框架&#xff0c;但是目前根据业务需…

阿里云redis内存优化——PCP数据清理

在阿里云安装了一个redis节点&#xff0c;今天使用时忽然想着点击了一下分析内存。好家伙&#xff0c;居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊&#xff0c;怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度&#xff0c;研究了下这个问题的来源。网上…

学系C++:循环练习案例

一&#xff0c;猜数字 案例描述&#xff1a;系统随机生成一个1到100之间的数字&#xff0c;玩家进行猜测&#xff0c;如果猜错&#xff0c;提示玩家数字过大或过小&#xff0c;如果猜对恭喜玩家胜利&#xff0c;并且退出游戏。 #include <iostream> using namespace st…

六大基础深度神经网络之CNN

左侧是传统卷积网络输入的是一列像素点&#xff0c;右侧是卷积神经网络&#xff0c;输入的是具有长宽通道数的原始图像 下图为整体架构。卷积层可以认为提取特征&#xff0c;池化层是压缩特征。全连接层是把图像展平然后计算10个类别的概率值 给出一张图像不同区域的特征不同&a…

SemiDrive E3 MCAL 开发系列(6)– Icu 模块的使用

一、 概述 本文将会介绍 SemiDrive E3 MCAL Icu 模块的简介以及基本配置&#xff0c;其中还会涉及到 Xtrg 模块的配置。此外会结合实际操作的介绍&#xff0c;帮助新手快速了解并掌握这个模块的使用&#xff0c;文中的 MCAL 是基于 PTG3.0 的版本&#xff0c;开发板是官方的 …

嵌入式入门Day35

网络编程 Day2 套接字socket基于TCP通信的流程服务器端客户端TCP通信API 基于UDP通信的流程服务器端客户端 作业 套接字socket socket套接字本质是一个特殊的文件&#xff0c;在原始的Linux中&#xff0c;它和管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号等…

【Redis】:初识Redis

1.1 盛赞 Redis Redis 是⼀种基于键值对&#xff08;key-value&#xff09;的 NoSQL 数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis 中的值可以是由 string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xf…

MATLAB 车牌自动识别系统设计 图像分割与图像增强方法 车牌识别

一 车牌自动识别系统总体设计 基于matlab的车牌识别系统&#xff0c;第一种方法采用图像分割与图像增强的方法&#xff0c;采集的车牌后将图像传入程序中&#xff0c;对图像进行处理后将车牌号提取出来&#xff0c;然后与数据库的样本进行对比后输出结果。 本课题拟采用的思路&…

Windows下C++使用SQLite

1、安装 进入SQLite Download Page页面&#xff0c;下载sqlite-dll-win-x86-*.zip、sqlite-amalgamation-*.zip、sqlite-tools-win-x64-*.zip三个包&#xff0c;这三个包里分别包含dll文件和def文件、头文件、exe工具。 使用vs命令行工具生成.lib文件&#xff1a;进入dll和def文…