• 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
  • 相关阅读:
    暴力STL
    多维坐标离散 排序二分 | set | hash
    H. 试题H:摆动序列 25'
    蓝桥杯模拟赛4.D.路径配对[搜索+判重]
    python 参数表,可变参数,用 json/dict 作为函数参数传入
    sql 修改查询结果的值给接下来的查询用,但是不更改数据库中的值
    使用chrome全网页或部分网页截图
    一个sql语句中用多个where
    sql 使用with as 语句报 “Only `SELECT` statements are allowed against this database”错误
    go 语言并行
  • 原文地址:https://www.cnblogs.com/jpfss/p/11004692.html
Copyright © 2020-2023  润新知