56 mysql 用户权限相关的实现

news2024/11/16 13:38:53

前言

这里讨论 mysql 的权限相关处理 

使用如下语句创建 tz_test 用户, 并赋予他 test_02 数据库的查询权限 

create user 'tz_test'@'%' identified by 'tz_test';

grant select on test_02.* to 'tz_test'@'%';

 

查询目标数据表, 数据如下, tz_test_02

23c12202d8eb5408cb1c00bad53add24.png

 

 

UPDATE command denied to user 'tz_test'@'192.168.220.1' for table 'tz_test_02'

执行 update 之后, 客户端这边 得到的信息如下

f32c9c6ffb105f2cb0301bc92e991fad.png

 

这里对于当前用户 tz_test 访问 tz_test_02 数据表 验证在这里, 由于上面 check_grant 这边验证 tz_test 用户没有 test_02.tz_test_02 的 UPDATE 权限, 这里是响应的错误信息给客户端 “UPDATE command denied to user 'tz_test'@'192.168.220.1' for table 'tz_test_02'”

829fa5dbfaeefbab46e96e43d6559220.png

 

首先看一下 各个权限的标志, 分别对应于 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP 等等各个权限 

e7aeaebdb792b1c8b344bcfbce3a24d9.png 

 

结合这里的上下文, 我们可以看到的是 tz_test 用户在 192.168.220.1 上面访问 mysql 服务器 

期望 对 test_02 库的 tz_test_02 表 执行 UPDATE 相关操作

然后这里 tz_test@192.168.220.1 对于 test_02.tz_test_02 的权限仅仅只有 SELECT 权限 

0a3c4e57f5cae88fa35e51483116267e.png

 

然后 table_hash_search 是查询 是否有 数据库表粒度的权限配置, 这部分的配置是持久化在 mysql.tables_priv 中, 然后加载到了 column_priv_hash 中, table_hash_search 中查询到的 HASH 是 column_priv_hash

如果 上面数据库粒度的 UPDATE 权限也没有, 然后 这里具体到某张表粒度的权限也没有, 那么就是 当前用户在当前主机上 没有访问 目标数据库的目标数据表 的 更新权限

然后 走了后面的 “goto err” 响应错误信息给客户端 

6cdf80b809e50bd7112ab88c54c8b59a.png

 

获取 tz_test@192.168.220.1 访问 test_02.tz_test_02 的权限的地方 

这里是从 thd->security_context()->db_access() 获取的数据 

85c60b27a704684236f3b3dd6d618a02.png

 

thd->security_context()->db_access() 是来自于切换数据库的时候, 有更新 当前用户@当前主机 访问目标数据库 的权限信息

acl_get 通过 user@host -> db 去从 mysql.db 中获取 权限信息

然后 下面 mysql_change_db_impl 更新权限信息到 thd->m_security_ctx->m_db_access

fa71b4cf274f32fb6022b4ba6fb52c51.png

 

acl_get 中遍历 acl_dbs 列表去查询 user@host -> db 的认证信息 

三层比较, user, ip, db, 对应的就是 user@host -> db

3385fb82165c5549ab08d5294ee5b17e.png

 

设置当前 session[user@host] 访问 目标数据库 的权限信息

35ba40dd26038878884443663803323c.png 

以上就是整体流程

切换数据库的时候, 会从 acl_dbs[对应的是 mysql.db 的数据] 中查询 user@host -> db 的认证信息, 保存到当前 session 的上下文 

然后 业务查询过来了之后, check_access 将该认证信息 传递到 table->grant->db_access

然后 check_grant 中来做具体的权限校验

如果 数据库权限中没有该权限, 并且 数据表权限 中没有该权限, 则响应 TABLEACCESS_DENIED_ERROR

 

 

acl_dbs 的加载 

遍历的是 mysql.db 这张数据表, 然后来加载数据, 之后放到 acl_dbs

fd221d9c5171354f880118e8f57d54aa.png

 

get_access 中获取的是当前记录行的各个标记组成的 access 数字 

主要就是 (user@host -> db) -> access 的一个映射 

ec13b8b94ea27c3d5385f914ff49ca79.png 

获取 access 的方式如下 

遍历各个 权限表示的字段, 加上各自的权重, 然后组成 access 

8f25b0ae6a32adae6b2e048440d04b34.png

 

 

 column_priv_hash 的加载 

这里面加载的是 mysql.tables_priv 数据表, 对应的是 (user@host -> db@tableName) -> access 的一个映射, 数据是维护熬了 column_priv_hash 中 

如下是 初始化的操作, 遍历 mysql.tables_priv 的记录信息, 封装成为 GRANT_TABLE 数据, 然后将数据插入到 column_priv_hash 中 

然后 使用是在 check_grant 中使用的 

f2548c21bce22033626868e8e5f2cba9.png

 

根据 mysql.tables_priv 记录信息, 创建 GRANT_TABLE 的信息 

主要是 (user@host -> db@tableName) -> access

f9b0087129c3391f362fa73601ee0bc2.png

 

 

 完

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159988.html

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

相关文章

Centos 8安装VNC及多用户配置详细教程

Centos 8安装VNC及多用户配置详细教程 参考一、安装前准备二、安装三、创建新用户和设置VNC密码四、创建VNC系统服务文件五、多用户映射和配置VNC六、客户端用VNC Viewer登录 参考 1、参考1: VNC安装英文说明(英文说明有误且仅适合单用户)&a…

乌克兰因安全风险首次禁用Telegram

据BleepingComputer消息,乌克兰国家网络安全协调中心 (NCCC) 以国家安全为由,已下令限制在政府机构、军事单位和关键基础设施内使用 Telegram 消息应用程序。 这一消息通过NCCC的官方 Facebook 账号对外发布,在公告中乌…

java并发之并发理论

并发理论 Java 内存模型 Java 内存模型(即 Java Memory Model,简称 JMM)试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 本身是一种抽象的概念,并不真实存在&…

【第十二章:Sentosa_DSML社区版-机器学习之回归】

目录 12.1 线性回归 12.2 决策树回归 12.3 梯度提升决策树回归 12.4 保序回归 12.5 XGBoost回归 12.6 随机森林回归 12.7 广义线性回归 12.8 LightGBM回归 12.9 因子分解机回归 12.10 AdaBoost回归 12.11 KNN回归 12.12 高斯过程回归 12.13 多层感知机回归 【第十…

vue Echart使用

一、在vue中使用Echarts 1.安装Echarts npm install echarts --save2.准备一个呈现图表的盒子 给盒子起名字是建议使用id选择器 这个盒子通常来说就是我们熟悉的 div &#xff0c;这个 div 决定了图表显示在哪里&#xff0c;盒子一定要指定宽和高 <div id"main&quo…

构建智能化直播美颜工具:视频美颜SDK的开发指南

本篇文章&#xff0c;笔者将为开发者提供一份详细的指南&#xff0c;帮助你从零开始构建智能化直播美颜工具&#xff0c;并了解视频美颜SDK的实现路径和优化策略。 一、视频美颜SDK的核心功能 视频美颜SDK主要功能是通过一系列图像处理算法&#xff0c;对主播的面部进行实时优…

安卓13删除下拉栏中的设置按钮 android13删除设置按钮

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。 2.问题分析…

[vulnhub] Hackademic.RTB1

第一次打靶机&#xff0c;思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境&#xff1a;kali Linux - 192.168.75.131&#xff0c;靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线&#xff0c;不进行端口扫描 nmap -sP 192.16…

WordPress精选文章如何添加侧边栏和页面?

WordPress精选帖子是一项功能&#xff0c;可让用户在其网站主页或其他值得注意的部分突出显示特定帖子。这些精选帖子通常以视觉上独特的方式显示&#xff0c;例如以滑块、网格或轮播格式显示&#xff0c;以提高其可见性和对访问者的吸引力。 网站所有者可以手动选择他们想要推…

构建 Spring Data JPA 项目所需的依赖与配置

一、使用 Spring Boot Initializr 添加依赖的步骤&#xff08;IntelliJ IDEA 中的操作&#xff09; 打开 IntelliJ IDEA&#xff0c;选择 New Project > Spring Initializr。填写项目的 Group、Artifact、Project Metadata 等基础信息。选择 Maven Project&#xff0c;并选…

【第十六章:Sentosa_DSML社区版-机器学习之生存分析】

【第十六章&#xff1a;Sentosa_DSML社区版-机器学习之生存分析】 16.1 加速失效时间回归 1.算子介绍 加速失效时间回归模型Accelerated failure time (AFT)是一个监督型参数化的回归模型&#xff0c;它可以处理删失数据。它描述了一个生存时间的对数模型&#xff0c;所以它通…

【C语言从不挂科到高绩点】19-指针01【重点知识】

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 本节将为大家讲解C语言中非常重要的知识点-指针: 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想…

论文阅读 | 一种基于潜在向量优化的可证明安全的图像隐写方法(TMM 2023)

TMM 2023 中国科学技术大学 针对现有的可证明安全的图像隐写不能抵抗有损图像操作&#xff0c;而现有的生成图像隐写不能证明安全问题&#xff0c;提出一种基于潜在向量优化的可证明安全的图像隐写方法&#xff08;名为PARIS&#xff09;&#xff0c;该方法受到逆采样器和噪声…

JAVA零基础入门——高级教程之集合框架

目录 1. 关于集合框架 1.1 集合接口 1.2 集合实现类 1.3 集合算法及迭代器和比较器的使用 2. 数据结构 2.1 ArrayList 2.2 LinkedList 2.3 HashMap 2.4 HashSet 3. 迭代器 1. 关于集合框架 集合框架是使用数据结构&#xff08;参见本文2. 数据结构&#xff09;来满…

【Qualcomm】高通SNPE框架的使用 | 原始模型转换为量化的DLC文件 | 在Android的CPU端运行模型

目录 ① 激活snpe环境 ② 设置环境变量 ③ 模型转换 ④ run on Android 首先&#xff0c;默认SNPE工具已经下载并且Setup相关工作均已完成。同时&#xff0c;拥有原始模型文件&#xff0c;本文使用的模型文件为SNPE 框架示例的inception_v3_2016_08_28_frozen.pb文件。imag…

如何只用 CSS 制作网格?

来源&#xff1a;how-to-make-a-grid-like-graph-paper-grid-with-just-css 在看 用于打印到纸张的 CSS 这篇文章时&#xff0c;对其中的网格比较好奇&#xff0c;作者提供了 stackoverflow 的链接&#xff0c;就看到了来源的这个问题和众多回复。本文从里面挑选了一些个人比较…

面试知识点总结篇一

一、C语言和C有什么区别 C语言是面向过程&#xff0c;强调用函数将问题分解为多个子任务&#xff0c;按顺序逐步进行。数据和操作分开C则是面向对象&#xff0c;面向对象是一种基于对象和类的编程范式&#xff0c;关注如何利用对象来抽象和模拟现实世界的实体。因此引入了类&a…

计算机毕业设计 校园新闻管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

77、Python之函数式编程:一文搞懂functools模块的核心应用

引言 Python作为一种支持多范式的编程语言&#xff0c;除了在“一切皆对象”的理念支持下的&#xff0c;函数对象也是一等公民、各种高阶函数的自然实现、lambda表达式快速编写纯函数之外。还有一个内置的模块functools&#xff0c;能够更好地支持我们在Python中应用函数式编程…

[笔记]某视觉三维定位系统参数表

表中的参数是彼此关联的&#xff0c;其实是就是视频解算的速度。里面的1秒直接对应1FPS300m秒直接对应3FPS0-20m的识别范围&#xff0c;与摄像头分辨率、视在焦距与摄像头基线有明确的对应关系。它的矩阵非正方。怀疑一组用于远距&#xff0c;一组用于近距&#xff0c;属于固定…