Mysql视图无权限访问的批量修改方法

我们在使用Mysql数据库的时候,在项目上线迁移的时候,有时候由于开发环境和生产环境的差异,有时候

Mysql用户不一定能够保持一致,而其中view视图A用户创建的记录B用户就会无法访问

如果视图的记录比较少的话还好,如果多,那一个个重新修改创建就不太可能。

这里找到一个批量修改“定义者”的方法。

先根据如下SQL查询条件拼装出所有需要修改的视图的SQL

 

sql> select concat("alter DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `",TABLE_SCHEMA,"`.",TABLE_NAME," as ",VIEW_DEFINITION,";") from information_schema.VIEWS where DEFINER = 'olduser@%';

 

然后执行下面的SQL批量执行就可以了

alter DEFINER=`root`@`localhost` 
SQL SECURITY DEFINER VIEW `test`.test_view as select `t`.`storeid` AS `storeid` from (`test`.`sc_saleorder_pdt` `t` left join `test`.`sc_saleorder` `m` on((`t`.`dataid` = `m`.`id`))) where (`m`.`jhtype` = 'wl');
alter DEFINER=`root`@`localhost` 

 

上一篇:《Oracle MySQL编程自学与面试指南》12-02:使用视图


下一篇:MySQL SQL SECURITY definer invoker