本文主要是介绍mysql 视图definer_MySQL视图 definer invoker 权限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、创建视图
CREATE
VIEW `NewView`AS
SELECT
`user`.USER_ID,
`user`.USER_NAME,
department.DEPT_ID,
department.DEPT_NAME
FROM
`user` ,
department
WHERE
`user`.DEPT_ID = department.DEPT_ID ;
2、修改视图
ALTER
ALGORITHM=UNDEFINED
DEFINER=`root`@`127.0.0.1`
SQL SECURITY DEFINER
VIEW `dept_user` AS
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`
from (`user` join `department`)
where (`user`.`DEPT_ID` = `department`.`DEPT_ID`)
ORDER BY
department.DEPT_NO ASC ;
3、 给视图赋权
GRANT SELECT, SHOW VIEW ON `NewView`.* TO 'View'@'192.168.%' ;
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'
这篇关于mysql 视图definer_MySQL视图 definer invoker 权限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!