1、创建视图


   
  1. CREATE
  2. VIEW `NewView` AS
  3. SELECT
  4. `user`.USER_ID,
  5. `user`.USER_NAME,
  6. department.DEPT_ID,
  7. department.DEPT_NAME
  8. FROM
  9. `user` ,
  10. department
  11. WHERE
  12. `user`.DEPT_ID = department.DEPT_ID ;

2、修改视图


   
  1. ALTER
  2. ALGORITHM=UNDEFINED
  3. DEFINER= `root`@ `127.0.0.1`
  4. SQL SECURITY DEFINER
  5. VIEW `dept_user` AS
  6. select `user`. `USER_ID` AS `USER_ID`, `user`. `USER_NAME` AS `USER_NAME`, `department`. `DEPT_ID` AS `DEPT_ID`, `department`. `DEPT_NAME` AS `DEPT_NAME`
  7. from ( `user` join `department`)
  8. where ( `user`. `DEPT_ID` = `department`. `DEPT_ID`)
  9. ORDER BY
  10. department.DEPT_NO ASC ;

3、 给视图赋权


   
  1. GRANT SELECT, SHOW VIEW ON `NewView`.* TO 'View'@ '192.168.%' ;
  2. flush privileges;

修改后用户还是不能查看,登陆root 也不能查看。

百度得了下面解决办法:

登陆工具-视图-设计视图-高级选项, 修改定义者为需要权限用户 或  修改安全性Definer 为invoker

原理:

definer和invoker的区别

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

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

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

4、修复视图

在MySQL中当一个视图所依赖的的表有变化时,打开或修改视图会出现如下面的错误信息:

1356 - View 'database.view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them.
  

解决:

从MySQL的information_schema中的视图表View中,用下面的语句修复视图,如:

select VIEW_DEFINITION from information_schema.views where TABLE_SCHEMA='database' and TABLE_NAME='view'
  
原文地址:https://blog.csdn.net/zhangxueleishamo/article/details/83056598
发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

mysql修改definer方法知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。