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
  • 相关阅读:
    gzip是一种数据格式,deflate是一种压缩算法
    js 实现图片上传 续
    iframe 元素会创建包含另外一个文档的内联框架(即行内框架)
    HTTPS简介----
    回归测试
    HTTP 返回码 400
    js 实现 一张图片的上传
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
  • 原文地址:https://www.cnblogs.com/jpfss/p/11004692.html
Copyright © 2011-2022 走看看