MySQL檢視 definer & invoker 許可權
阿新 • • 發佈:2018-12-26
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'