低权限数据库账号无法访问视图

一,问题描述

版本说明:

迪拜1.0.5


问题现象:


迪拜1.0.4升级到1.0.5时,创建的police_user用户,仅拥有所有库表数据的增,删,改,查功能。本来还能支持视图的查看。但实际上查询视图无权限



二,问题排查思路:

问题集中在无权限上:

  1. 给赋予show view,create view的权限,看能否查看视图 -- 实际是不能
  2. 视图权限和数据库用户有关:排查视图的创建语句 -- 确实是定义了definer

三,操作指导

  1. 在原来权限基础上,赋予新权限

grant select,insert,update,delete,show view,create view on *.* to 'police_user'@'%' identified by 'TGHksj#@567';


连上navicat,发现依然无法查看视图


  1. 使用含有全权限的账号flyway_user登录,查看视图的定义

选中视图->点击“设计视图”->点击“高级” 查看定义者


发现视图的定义者是 report_user@%


由于版本升级,我们将所有的report_user更新为flyway_user,新增了police_user只做数据的操作。并且删除了report_user


因此查询视图失败


再解释一下:视图安全性是Definer,因此查询视图会根据定义者的权限进行查询。report_user不存在了,自然无法查询视图


解决方法:解决方法很简单,删除视图,重新创建即可



四,常见问题原因记录

数据库迁移;变更数据库用户的过程中,未将所有数据库用户相关的数据变更时,会产生该错误。



五,更新记录



版本


功能


修改时间


修改人


V1.0


数据库视图无法查询


2022/4/12


张波



























文档更新时间: 2022-04-12 14:23   作者:w18380581554