MySQL视图 definer & invoker 权限

MySQL视图 definer & invoker 权限,第1张

MySQL视图 definer & invoker 权限

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/587050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存