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'