日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

definer= 授权_mysql常见问题之视图权限控制--安全性为DEFINER

發布時間:2024/9/30 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。