definer= 授权_mysql常见问题之视图权限控制--安全性为DEFINER
生活随笔
收集整理的這篇文章主要介紹了
definer= 授权_mysql常见问题之视图权限控制--安全性为DEFINER
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
前段時間在做數據庫備份時提示:
mysqldump: Couldn't execute 'SHOW FIELDS FROM `v_ocs_group_production_lines1`': SELECT command denied to user ''@'%' for column 'work_date' in table 't_ocs_employee_attendace' (1143)這個報錯還是比較常見的問題之一,所以就拿來分析了。
思路:
當視圖的安全性為DEFINER時,數據庫中存在DEFINER指定的用戶,也就是圖中的定義者所填寫的。并且該用戶擁有對應的權限,才能執行。與當前用戶是否有權限無關。
當視圖的安全性為INVOKER時,只要執行者有執行權限,就可以成功執行。
definer和invoker的區別:
在創建視圖或者是存儲過程的時候,是需要定義安全驗證方式的(也就是安全性SQL SECURITY),其值可以為definer或invoker,表示在執行過程中,使用誰的權限來執行。
definer:由definer(定義者)指定的用戶的權限來執行
invoker:由調用這個視圖(存儲過程)的用戶的權限來執行
1、definer
當定義為DEFINER時,必須數據庫中存在DEFINER指定的用戶,并且該用戶擁有對應的操作權限,才能成功執行。與當前用戶是否有權限無關。
示例:
CREATE DEFINER=dev@% PROCEDURE p_user_login(IN u_name VARCHAR(25), IN u_password VARCHAR(100))BEGINSELECT u.id, u.name, u.tid, u.status, u.is_report FROM v_user u WHERE u.name=u_name AND u.password=u_password AND u.status=1;END;2、invoker
當定義為INVOKER時,只要執行者有執行權限,就可以成功執行。
示例:
CREATE DEFINER=dev@% PROCEDURE p_user_login(IN u_name VARCHAR(25), IN u_password VARCHAR(100))SQL SECURITY INVOKERBEGINSELECT u.id, u.name, u.tid, u.status, u.is_report FROM v_user u WHERE u.name=u_name AND u.password=u_password AND u.status=1;END;1、查看視圖
這里先看下視圖的一些定義。
可以看到定義者是指定用戶了。
2、嘗試授權
這個時候是授權失敗的。
mysql> GRANT SELECT ON test.v_ocs_group_production_lines1 TO 'root'@'localhost';mysql> GRANT SELECT ON test.v_ocs_group_production_lines1 TO 'root'@'%';3、修改definer
4、測試
測試通過。
覺得有用的朋友多幫忙轉發哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~
總結
以上是生活随笔為你收集整理的definer= 授权_mysql常见问题之视图权限控制--安全性为DEFINER的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择之后触_发宜常梳:4种材质的梳子,我
- 下一篇: larvare数据库引入php_PHP全