ftcm

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

      最近公司新项目,数据库表结构及基础数据从生产环境dump下SQL后部署在新环境中,应用程序部署完毕,登陆访问正常,但部分功能查询报错,查看应用程序日志报错:Acces  denied for user  'web_test'@'192.168.1.%'(using password:yes)。

What?  再次确认程序使用账号密码正确,用mysql客户端测试连接也正常,最关键的是其他功能都能正常访问数据库!!!哪儿出了问题呢?经过与研发讨论确认出现问题的功能,都是需要访问视图!那么是数据库账号没有访问视图权限?但账号给的都是增删改查的权限,生产库上也一样的,为什么换了环境就不能用了呢?答案马上揭晓:

我们查看其中一个视图,show create view v_user;

具体如下:CREATE ALGORITHM=UNDEFINED DEFINER=`migrate`@`%` SQL SECURITY DEFINER VIEW `v_user` AS select   ...

大家发现问题没有?细心同学会发现数据库账号不一样!问题就出在这儿,原来新环境中程序使用账号为web_test,而视图的DEFINER为原来线上账号migrate,但新环境中并没有migrate这个账号,导致视图无法访问。

解决办法:知道问题就好解决了,修改视图的DEFINER即可。

alter  DEFINER='web_test'@'192.168.1.%'  VIEW  `v_user` AS select  ...

很简单的一个问题,但排查起来很费力,数据库表结构迁移时很少会考虑到视图、存储过程的DEFINER账号,导致在新环境中各种折腾。。。

posted on 2018-08-24 15:50  tfcm  阅读(887)  评论(0编辑  收藏  举报