MySQL视图 definer & invoker 权限
视图的安全性为DEFINER时,数据库中存在DEFINER指定的用户,也就是图中的定义者所填写的。并且该用户拥有对应的权限,才能执行。与当前用户是否有权限无关。
当视图的安全性为INVOKER时,只要执行者有执行权限,就可以成功执行。
definer和invoker的区别:
在创建视图或者是存储过程的时候,是需要定义安全验证方式的(也就是安全性SQL SECURITY),其值可以为definer或invoker,表示在执行过程中,使用谁的权限来执行。
definer:由definer(定义者)指定的用户的权限来执行
invoker:由调用这个视图(存储过程)的用户的权限来执行
因此,当创建新的数据库并授权指定用户访问后,该用户默认是无法访问该数据库中新创建的视图的
解决办法:(均使用mysql中的root用户操作)
第一步:给该用户授权访问视图的权限
use community; # 切换到指定数据库中
GRANT SELECT, UPDATE, SHOW VIEW ON `v_popular_will` TO 'community_user'@'173.173.173.243'; # v_popular_will为视图名
SHOW GRANTS FOR 'community_user'@'173.173.173.243';  # 查看用户的权限                                   
这一步也可以通过root用户使用navicat连接数据库,找到视图,设计视图,高级,安全性中进行操作

第二步:通过root用户使用navicat连接数据库,找到视图,设计视图,高级,安全性:把definer修改成invoker,保存

                    
                
                
            
        
浙公网安备 33010602011771号