当前位置: 首页 > news >正文

mysql group_concat 与 union 联合查询漏洞,数据列最大长度为341

一、问题发现

最近 项目反馈有个问题,数据明明存在,但是到界面显示就少了一部分。
界面框框数据本应该勾选的,但是就是不勾选!
在这里插入图片描述

二、问题分析

经系列排查,发现问题所在 mysql group_concat 与 union 联合查询漏洞;

select * from (
select GROUP_CONCAT(subsystem_code) subsystem_code from code_temp where id <41
union  all 
select code as subsystem_code from code_temp2
) temp;

select GROUP_CONCAT(subsystem_code) subsystem_code from code_temp;

单个 GROUP_CONCAT 无论多个 subsystem_code都不存在任何问题,但是当 套上 union 之后,id 扩大到41时,GROUP_CONCAT(subsystem_code) 数据就被截取了,且字符串最大长度为 341.

mysql 官方说明:
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet.
即 mysql group_concat_max_len所指定的,默认是1024,单位是byte,划算成字符要打折扣 341=1024/3;

show variables like 'group_concat_max_len';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

三、问题解决

可以修改,修改办法如下:

方法一:修改MySQL配置文件my.cnf,在[mysqld]节点中添加

group_concat_max_len = 18446744073709551615

方法二:直接控制台上设置立即生效

-- 【必须操作】更改全局配置----
SET GLOBAL group_concat_max_len=18446744073709551615;
-- 【可选操作】使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效----
SET SESSION group_concat_max_len=18446744073709551615;

方法三:业务层修正 (推荐)

通常的办法其实是让数据库返回一个列表,在应用服务层,进行join

相关文章:

  • 机器学习基础:统计量与抽样分布
  • 工作中整理的常用的Linux命令
  • Vue2和Vue3的区别——实例创建、响应式数据代理、v-for和v-if优先级、生命周期
  • 跑步装备推荐:2022年跑步装备选购清单
  • 多线程(进阶)
  • 如何学习HTML5 需要掌握哪些技能
  • Dinky,让 Flink SQL 纵享丝滑
  • Docker | docker容器导出以及常见问题的处理
  • 【云原生之Docker实战】使用Docker部署Pichome个人相册系统
  • JavaScript 33. Promise
  • 探究MYSQL之索引
  • 创邻科技入选Gartner全球《图数据库管理系统市场指南》代表厂商
  • WEB自动化测试(5)—— Cypress-元素交互
  • 怎么入门网络安全,学这两类证书就够了NISP或CISP
  • iOS 16 SwiftUI 4.0 列表(List)项分隔线变短的原因及解决
  • 单链表——简单的增删查改
  • 电子技术——MOS放大器基础
  • 嵌入式 学习
  • 【Linux】vim编辑器的使用
  • 强化学习笔记:基于策略的学习之策略迭代(python实现)
  • 1. Spring 基础入门
  • springboot 分布式全局唯一id的生成-雪花算法snowflake
  • 如何使用VMware虚拟机(带你快速了解)
  • Python---学生管理系统(pyinstaller)
  • 客快物流大数据项目(一百零八):Spring Cloud 技术栈
  • 矩阵的奇异值与特征值,SVD分解与特征值分解区别与联系(正定、超定、欠定矩阵)
  • vue依赖缓存_[VUE]computed属性的数据响应和依赖缓存实现过程
  • java菜单栏变成白色_怎么设置java画布的背景为白色(3)
  • 【学习SLAM】G2O的在SLAM中使用 高博14讲:第七讲中g20 3d3d 3d2d 报错的改动
  • [学习SLAM]VO视觉里程计(视觉SLAM十四讲CH9.1)
  • angular 绑定自定义属性_Angular 属性绑定更新机制
  • efcore多表查询出错_【连载6】-SQL-如何提高sql查询的效率?
  • [学习SLAM]编译安装DSO并在线运行摄像头
  • 【高精地图】GEOJSON标准格式学习
  • react 父子传值_react父子组件之间传值的方法