zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    .Net Remoting使用总结
    MacOS入门
    第一部分_Mac技巧
    国内安装Homebrew
    MacOS工具
    org.springframework.beans.factory.UnsatisfiedDependencyException异常
    五天一体_企业权限管理(SSM整合)
    00_02_使用Parallels Desktop创建Windos7虚拟机
    00_01_使用Parallels Desktop创建WindosXP虚拟机
    OpenCV中几何形状识别与测量
  • 原文地址:https://www.cnblogs.com/jpfss/p/11004692.html
Copyright © 2011-2022 走看看