Administrator
发布于 2020-08-26 / 1704 阅读 / 0 评论 / 0 点赞

mysql视图权限设置的踩坑经历

Mysql视图权限设置的踩坑经历

1、问题

今天导入数据库的时候,在访问视图的时候总是报错,说没有用户和权限。
image-20200826173034204
后来发现视图的定义者是原来的'medical'@'%',并且安全性设置的是definer,现在这个用户不存在了,虽然新用户'user'@'192.168.1.%’拥有和原来相同的数据库权限,但是依然不能使用这些视图。
image-20200826173342571

2、解决

  • 把安全性定义由definer设置为invoker就好了.
    image-20200826173429330
  • 线上生产环境建议不要改安全定义,毕竟涉及安全。、
  • 建议把'medical'@'%'改成'xxx'@'%',就是把定义者改成当前在用的有权限的用户

3、definer和invoker的区别

在创建视图或者是存储过程的时候,是需要定义安全验证方式的(也就是安全性SQL SECURITY),其值可以为definer或invoker,表示在执行过程中,使用谁的权限来执行。

definer:由definer(定义者)指定的用户的权限来执行

invoker:由调用这个视图(存储过程)的用户的权限来执行

  • definer

当定义为DEFINER时,必须数据库中存在DEFINER指定的用户,并且该用户拥有对应的操作权限,才能成功执行。与当前用户是否有权限无关。

  • invoker

当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。

参考自https://pdf.us/2018/02/24/679.html


评论