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

MySQL案例-show fileds from 提示无权限

-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------

背景:
MySQL-5.7.12, 开发用的环境出现show fields的报错;

场景:
业务方反馈在执行show fields的命令时报错了,
在测试环境构造了报错的场景, 实际报错内容类似于:

点击(此处)折叠或打开

  1. ERROR 1143 (42000): SELECT command denied to user ''@'%' for column 'role_id' in table 'xxxxx'

直观上看, 很容易就能发现是权限的问题,
不过有一个疑点:
报错内容的用户那一栏显示为空;

分析:
首先能肯定的是这是由权限引起的, 错误信息中很明显;
第二点就是用户栏显示为空, 这个有可能是指用户不存在, 也有可能是有关联的用户信息存在一些问题,导致无法显示;

排查:
1.排查登录用户的权限, 登录到线上环境, 发现业务账号确实会报错, 然后换成root账号也是一样......

而业务账号是有view对应db, 以及view 的select中对应db的ALL权限的, 何况root也不行, 说明这个权限相关的报错, 并不是由登录用户引起的;

2.既然不是登录用户的权限问题, 那么就看看视图本身的权限;

------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关资料:
MySQL-5.7中, 视图的权限控制是由视图创建时自行指定的, 如测试环境中, 有问题的视图的创建语句:

点击(此处)折叠或打开

  1. CREATE ALGORITHM=UNDEFINED DEFINER=`test`@`%` SQL SECURITY DEFINER VIEW test_view_xxx_roles AS select xxx;
红色部分:
定义了这个view的创建者(定义者), 代表了这个view在创建时用到的权限是 `test`@`%`提供的;

绿色部分:
定义了这个view在访问的时候, 校验权限时, 检查哪个用户, DEFINER或者是INVOKER;

------------------------------------------------------------------------------------------------------------------------------------------------------------------

从相关资料可以了解到, show fields from view_stack会报无权限的错误, 就是因为根据 SQL SECURITY 去校验用户的权限时, 发现权限没了;
从view的内容来看, 只需要对应库的select权限就好了, 那么看看现在库中, 创建这个view的test用户的权限:


是的, 真的没有看错, 开发用的环境里面, 这个view对应的用户已经没了....._(:з」∠)_

那么创建这个用户以后, 看看是不是就不会报错了:


果然, 只要加上这个definer就不会再报错了;

处理方式:
最终的处理方式是修改了相关view的definer用户(需要 super权限才能修改view的这个字段);


重要的额外信息:
比较奇怪的是这个现象无法在"干净
"的库里面复现, 只有把开发环境的 数据库导入到测试环境才会出现这个问题, 可能有一些其他的因素影响到了mysql的处理逻辑;

相关文章:

  • B+树的数据结构理解
  • 基于Oracle的SQL优化--学习(三)
  • 打 spice 的 deb 格式安装包的时遇到的问题和解决方法
  • 基于Oracle的SQL优化--学习(四)
  • 基于Oracle的SQL优化--学习(五)
  • 基于Oracle的SQL优化--学习(六)
  • (转载)hibernate缓存
  • 基于Oracle的SQL优化--学习(七)
  • 基于Oracle的SQL优化--学习(八)
  • MySQL数字类型中的三种常用种类【转】
  • linux mmap 内存映射【转】
  • 基于Oracle的SQL优化--学习(九)
  • 基于Oracle的SQL优化--学习(十)
  • 在linux下,安装python3.5.2
  • MyBatis传入参数为list、数组、map写法
  • Android Volley源码解析
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS 提示工具(Tooltip)
  • IndexedDB
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java方法详解
  • Java精华积累:初学者都应该搞懂的问题
  • Spark学习笔记之相关记录
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue2.0 实现互斥
  • vue自定义指令实现v-tap插件
  • Web设计流程优化:网页效果图设计新思路
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作手记之html2canvas使用概述
  • 关于Java中分层中遇到的一些问题
  • 回流、重绘及其优化
  • 开源地图数据可视化库——mapnik
  • 老板让我十分钟上手nx-admin
  • 类orAPI - 收藏集 - 掘金
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 三分钟教你同步 Visual Studio Code 设置
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​如何防止网络攻击?
  • !!java web学习笔记(一到五)
  • # C++之functional库用法整理
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define、const、typedef的差别
  • #宝哥教你#查看jquery绑定的事件函数
  • %@ page import=%的用法
  • (02)vite环境变量配置
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (26)4.7 字符函数和字符串函数
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • *2 echo、printf、mkdir命令的应用
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .Net Winform开发笔记(一)