MySQL8.0 show create view BUG解析

MySQL用户权限深度解析:从user@host到动态权限与最小化实践 MySQL用户权限不是简单的账号创建与授权操作,而是一套融合身份认证、访问控制、安全策略与合规治理的系统性机制。其核心在于理解'user@host'原子性、四层权限嵌套(全局/库/表/列)、MySQL 8.0动态权限与角色模型等底层原理。技术价值体现在落实最小权限原则、支撑多租户隔离、满足GDPR/等保等强合规要求,并为DevOps流水线提供可审计、可版本化的权限基础设施。典型应用场景包括Web应用后端的读写分离控制、BI分析员的数据脱敏视图授权,以及DBA账号的分级沙箱管理。本文聚焦生产级权限设计逻辑与避 阅读详情
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:崔弘晨
  • 作者介绍:诺亚财富数据库DBA 擅长数据库SQL优化,喜欢分享技术

背景

​ 前段时间碰到一个比较古怪的MySQL Crash事件,当时打了general日志,发现是一条命令show create view造成的,经过反复实验以及查看源码,终于得以复现并找到原因。

环境如下:

OS:Centos7.8
MySQL:8.0.13/8.0.14/8.0.15

复现

​ 我在测试环境模拟了一套最简单的复现场景。

用户权限如下:

root@localhost:[(none)]> show grants for test;
+-------------------------------------+
| Grants for test@%                   |
+-------------------------------------+
| GRANT USAGE ON *.* TO `test`@`%`    |
| GRANT `test_role`@`%` TO `test`@`%` |
+-------------------------------------+
root@localhost:[(none)]> show grants for test_role;
+-----------------------------------------------------+
| Grants for test_role@%                              |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `test_role`@`%`               |
| GRANT ALL PRIVILEGES ON `test`.* TO `test_role`@`%` |
+-----------------------------------------------------+

​ 此处注意role角色是MySQL8.0新增的功能(大概是从oracle借鉴过来的),先将权限赋予role,再将role赋予用户。记得role赋权后用set default role all to user 激活(否则无法复现)。

视图结构如下:

CREATE ALGORITHM=UNDEFINED DEFINER=`test`@`%` SQL SECURITY DEFINER VIEW `test_show_view` AS select 1 AS `1`

​ 这里创建了一个最简单的视图,仅仅执行select 1,然后顺便给大家复习一下视图definer的定义:

​ MySQL创建视图等其他对象时有两个选项:definer和invoker,SQL SECURITY { DEFINER | INVOKER } :指明谁有权限来执行。DEFINER 表示按定义者拥有的权限来执行;INVOKER 表示用调用者的权限来执行。默认情况下,系统指定为DEFINER。

复现Crash

​ 先卖个关子,大家看看下两条指令有何不同,为何案例2会引发MySQL崩溃(而且是100%触发)?

案例1:

root@localhost:[test]> show create view test.test_show_view\G
*************************** 1. row ***************************
                View: test_show_view
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`test`@`%` SQL SECURITY DEFINER VIEW `test_show_view` AS select 1 AS `1`
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci

案例2:

root@localhost:[(none)]> show create view test.test_show_view\G
ERROR 2013 (HY000): Lost connection to MySQL server during query

​ 眼尖的同学们肯定发现了,案例2没有指定当前DB,是不是觉得很神奇?但的确是这个原因引发的一个bug。

原因分析

​ 首先看errorlog。 ​ 我截取了一些关键信息,错误日志显示是acl_getroot函数上发生的问题以及is an invalid pointer 无效指针造成的Crash.

file

​ 接着我们可以从源码中找出原因(启动Vscode!),调试后发现acl_getroot函数在 build/sql/auth/sql_auth_cache.cc代码里,用处是获取用户ROLE权限,然后出现问题的是在下面这段代码中。

  if (acl_user && sctx->get_active_roles()->size() > 0) {
    sctx->checkout_access_maps();
    ulong db_acl = sctx->db_acl({db, strlen(db)});
    sctx->cache_current_db_access(db_acl);
  }
  DBUG_RETURN(res);

​ 重点在这一句

ulong db_acl = sctx->db_acl({db, strlen(db)});

​ 还记得前面说的吗?复现的情况是没有指定当前db,此时db的值是0x0,sctx->db_acl({db, strlen(db)})直接报错返回空指针,MySQL此时也崩溃了。

​ 到这里,我们也终于找了崩溃的原因:因为show create view需要取definer的用户权限,但当用户有角色(role)权限时,且当前db未指定(0x0),会出现无效指针并引发Crash。

​ 接下来我又去查看下8.0.13后版本是否有修改,发现在8.0.16版本上,此行代码加上了一个判断。

ulong db_acl = db ? sctx->db_acl({db, strlen(db)}) : 0;

​ 也就是当前判断当前db未指定时,直接赋值是0。

解决方案

知道了原因,解决方案就很方便商定了

  1. 不使用role角色功能,直接赋予用户权限。
  2. 视图定义上definer直接定义为root@localhost,可以跳过acl_getroot函数。
  3. 升级版本,建议升级至更稳定的8.0.17或者20版本。

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

6440

MySQL事务深度解析:从ACID原理到Spring失效场景实战 事务是数据库保障数据一致性的核心机制,其本质是通过原子性、隔离性、持久性协同实现业务逻辑的可靠执行。理解事务需从底层原理切入:InnoDB借助WAL日志与MVCC多版本控制达成崩溃恢复与并发读写隔离;不同隔离级别(如READ COMMITTED与REPEATABLE READ)在MySQL 8.0中直接影响快照生成时机和幻读行为;而Spring的@Transactional注解因AOP代理限制,常在同类调用、私有方法或异常捕获时失效。技术价值在于规避资损与数据不一致——电商扣库存、金融转账、订单创建等典型场 阅读详情

相关推荐

mysql面试题

面试官想听:理解隐藏字段、undo log版本链、Read View,能说清楚RR和RC的区别。回答MVCC 是多版本并发控制的缩写,主要用在 InnoDB 等存储引擎中,目的是实现读不阻塞写、写不阻塞读,提升并发性能。它的核心思想是:每次修改数据时不覆盖旧数据,而是生成一个新版本,读操作根据事务的启动时间或 Read View 选择可见的版本。面试官想听:主键索引就是聚簇索引,二级索引是非聚簇索引,回表的概念和代价。回答聚簇索引(主键索引):叶子节点存储整行数据。

m0_47691180的博客 825

CentOS 8 安装 MySQL 8.0 实操指南:RPM 部署、SELinux 与 firewalld 配置

MySQL 是一种广泛使用的关系型数据库管理系统,其核心原理在于基于 SQL 的数据存储、事务处理与 ACID 特性保障。在 CentOS 8 这一采用模块化仓库和强制安全策略(SELinux + firewalld)的现代 Linux 发行版中,直接安装 MySQL 面临官方源缺失、依赖冲突与默认拒绝连接等技术挑战。因此,掌握通过 MySQL 官方 RPM 仓库部署 MySQL 8.0.x(如 8.0.33)、正确配置 SELinux 布尔值(mysqld_connect_any)及 firewalld

注重长远 天天积累 cqujsjcyj 473

将Matlab程序打包成.exe独立可执行程序

将Matlab程序打包成.exe独立可执行程序,在未安装Matlab的电脑上也能运行Matlab程序。

简简单单的学习笔记,致力于帮助更多前进路上的朋友~ 5万+

故障分析 | MySQL 5.7 使用临时表导致数据库 Crash

作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 目录 背景信息 故障分析 问题复现 测试日志 测试结论 参考链接 背景信息 在 MySQL5.7.30 主从读写分离环境下,从库在某天出现了 MySQL crash. 系统侧: 监控显示该从库主机的内存和CPU资源使用率在故障前后均正常,磁盘.

ActionTech的博客 1642

别再只会setStyleSheet了!Qt实现背景透明的5种方法全解析(附性能对比)

本文深入解析Qt实现背景透明的5种高阶方案,包括QPalette、setWindowOpacity、QGraphicsOpacityEffect、样式表和复合透明方案,并提供详细的性能对比与优化建议。针对不同平台和场景,帮助开发者选择最适合的透明效果实现方式,提升UI设计质量与性能表现。

weixin_27061475的博客 259

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 566

MySQL 8.0 视图简介

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL视图。 文章目录一.视图语法二.视图案例1.视图能够简化用户内的操作2.视图使用户能以多种角度看待同一数据3.视图对重构数据库提供了一定程度的逻辑独立性4.视图能够对机容密数据提供安全保护 前言: 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。 即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。 视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定

只是甲的博客 1881

给新考上北大软件与微电子学院的同学——利用北大资源

利用北大资源 首先,恭喜大家考入北京大学!希望软院成为各位人生旅途中快乐的一站! 说明:限于本人搜集能力有限,本文只列出本人常利用的资源(上课老师会告知的资源也不在此列),本文所述的资源只是北大可利用资源的一个子集。 一、 图书馆资源:北京大学图书馆的资源数量,我就不多废话了,这里主要说一样怎样利用这些资源。 a) 传统资源分布及查找:这种资源主要包括纸质书箱、杂志、光盘等内...

Felomeng的技术博客 1万+

mysql 指针不合法_MySQL Connector C – 指针无效

我正在尝试使用MySQL C Connector连接到数据库.我添加了库和源代码正确编译了所有必要的#include语句.我使用的代码如下:#include #include #include "mysql_connection.h"#include #include #include #include using namespace std;int main(void){using namesp...

weixin_34221892的博客 437

GAN网络详解析

介绍目前常见的GAN网络,以及GAN网络的基本组成

wm199的博客 6504

Ollama DNS 重新绑定攻击 (CVE-2024-28224)

一旦 DNS 重新绑定攻击成功,攻击者就可以对这些 API 进行排序,以读取 Ollama 运行的进程可访问的任意文件数据,并将这些数据泄露到攻击者控制的系统中。完成对“创建模型” API 请求的调用后,Ollama 将收集组成新创建的用户模型的许多工件,包括大型语言模型数据、许可证数据等,以及我们要提取的文件,所有这些都可以通过其 SHA256 内容进行寻址。这是我们要窃取的文件,在我们的示例中,是可通过运行 Ollama 的主机上的路径名访问的现有文本文件。值得注意的是,该模型配置为通过参数中的。

技术超强的网络安全平台 1648

记录mysql8.0遇到的bug

记录mysql8.0遇到的bug 目录MySql链接报错Springboot链接Mysql8.0出错报错代码springboot项目中的pom文件中配置的Mysql驱动版本与mysql数据库版一致application.yml MySql链接报错 新安装了mysql8.0.22 明明前两天测试能通过连接,但是在cmd运行 mysql -u root -p时,输入密码后总会报错。显示如下: ERROR 1045 (28000): Access denied for user ‘root’@‘localhos

weixin_43977402的博客 711

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入CSSCA频谱-空间交叉注意力,含多种创新改进,小目标检测、图像分割、高光谱图像分类、语义分割任务任务涨点

🔥本文提出CSSCA(频谱-空间交叉注意力)模块,通过中心像素引导的光谱与空间交叉注意力机制,有效提升YOLO26模型的特征表达能力。该模块实现了光谱与空间信息的协同优化,能够自适应强化关键通道与重要空间区域,增强模型对小目标和复杂场景的感知能力。文章详细介绍了CSSCA的网络结构、工作原理及四大优势,包括精准特征表达、协同信息优化、小样本适应性和轻量化设计。同时提供了完整的代码实现和四种改进方案的YAML配置文件,包括基础版、增强版、C3k2融合版和C2PSA融合版,为YOLO26模型的性能提升

Ai缝合怪、助力小伙伴高效发论文 267

【漏洞提示】MySQL8.0.29因重大bug官网已下架

前阵子,MySQL官网已经将 MySQL 8.0.29版本下架。据悉下架原因是由于MySQL 8.0.29 存在关于InnoDB解释器的重大Bug。而最新版本 8.0.30及以上的版本已修复此漏洞。

fashion的博客 2432

【无人机项目实战】第三章:fast_planner工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、规划系统运行逻辑【业务部分】1.Fast_planner_node.cpp【程序入口】功能代码实现2.kino_replan_fsm.cpp【状态机转移】功能代码实现KinoReplanFSM::init()函数订阅目标点回调函数订阅里程计回调函数检查路径规划是否成功【重要】执行状态机FSM定时器回调函数【重要】判断目标点是否有障碍物或者是轨迹执行过程中是否有障碍物的回调函数3

qq_35635374的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL DDL报错主键冲突:从ERROR 1062解析Online DDL机制与长事务陷阱

数据定义语言(DDL)是数据库管理的核心操作,用于创建、修改或删除数据库对象结构。其执行原理涉及数据库引擎的内部机制,特别是在线DDL技术通过创建临时表、复制数据并切换元数据的方式,力求在修改表结构时减少业务中断。这一过程的技术价值在于支持高可用架构下的平滑变更,但同时也引入了数据一致性的复杂挑战。在MySQL的InnoDB存储引擎中,当DDL操作与未提交的长事务并发执行时,MVCC机制可能导致数据复制阶段读取到旧版本数据,若该数据在临时表中违反唯一性约束,便会触发ERROR 1062主键冲突错误。这一现象

weixin_30402343的博客 543

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Databricks CREATE TABLE 五种语法本质与Delta表治理实践

在湖仓一体架构中,CREATE TABLE 不再是简单建表操作,而是定义数据契约的核心机制。它关联 Delta Lake 的 ACID 事务、时间旅行、Schema 强制、CDC 变更数据捕获等关键能力,直接影响数据可靠性、可追溯性与治理水平。理解不同语法(USING DELTA、LIKE、CLONE、OR REPLACE、Hive format)背后的数据生命周期语义,是构建高可用、可审计、易扩展表的基础。尤其在 Databricks + Unity Catalog 环境下,建表即定权属、定位置、定策略—

weixin_33739646的博客 405

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL到ES数据同步实战:Canal配置避坑指南(含常见报错解决方案)

本文是一份基于Canal实现MySQL到Elasticsearch数据同步的实战配置与问题排查指南。文章深入解析了MySQL的binlog配置、Canal Server与Adapter的生产级调优、高可用部署方案,并针对数据同步延迟、一致性等常见问题提供了详细的解决方案,帮助开发者有效避坑,构建稳定可靠的数据同步管道。

3c4x5z6v7b的博客 632

MySQL问题诊断思维链:从连接失败到死锁的五步定位法

MySQL作为最主流的关系型数据库,其稳定性直接关系到业务连续性。理解其底层原理——如连接建立机制、查询优化器如何选择索引、InnoDB事务与锁的协同逻辑、配置参数对资源调度的影响——是高效排障的前提。技术价值在于将模糊的‘慢’‘连不上’‘数据不一致’等现象,转化为可验证的指标(如Threads_connected、Innodb_buffer_pool_hit_rate、INNODB_TRX状态)和可回溯的操作路径。典型应用场景覆盖金融核心账务、电商大促后台与SaaS平台等高要求环境,尤其适用于处理ERRO

weixin_33743703的博客 566

MySQL 选型与安装完全指南 | 从版本对比到多平台部署,零基础也能轻松上手

📌 MySQL选型与安装指南摘要 本文为2026年最新MySQL安装教程,涵盖版本选型、多平台安装及常见问题解决方案。主要内容包括: 版本对比:详细分析MySQL 9.7 LTS/8.4 LTS/8.0 LTS特性差异,推荐新手选择8.4 LTS版本 安装指南: 提供Windows/Linux(Ubuntu)/macOS三大平台的详细安装步骤 包含字符集配置、远程访问设置等关键配置说明 问题解决:整理密码设置、端口占用、连接失败等新手常见报错的解决方案 版本建议: 新项目推荐MySQL 9.7 LTS(最

专注于跨端开发实战,分享从工程搭建到应用落地的全流程技术干货,助力开发者快速掌握跨平台开发核心能力,打造稳定、高效的应用。 395

Ubuntu 14.04 安装 MySQL 5.5 实战指南

MySQL 是一种关系型数据库管理系统(RDBMS),其核心原理是基于客户端-服务器架构、SQL 查询语言与事务ACID特性实现数据持久化与并发控制。在老旧系统运维与遗留环境迁移中,MySQL 5.5 仍具重要技术价值——它轻量、稳定、兼容性强,且无需 systemd 或现代插件机制。典型应用场景包括嵌入式教学实验、工业控制终端、课程实训平台及 Ubuntu Trusty Tahr(14.04)等已终止支持的 LTS 系统维护。本文聚焦于该特定组合下的真实部署难点:源失效修复、upstart 启动适配、my

weixin_34221036的博客 411

知识体系之MySQL

mysql

JaweG 5251
上一篇: MySQL8.0 show create view BUG解析
下一篇: MySQL8.0 show create view BUG解析
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值