1. 程式人生 > >Mysql視圖權限設置的踩坑經歷

Mysql視圖權限設置的踩坑經歷

視圖權限 show view 查看視圖權限

1.事件背景
今天臨近中午飯點時,開發同事發來需求,在mariadb庫創建兩個視圖,要求指定帳號有只讀權限。
很簡單的需求,連上服務器,兩條grant命令一刷,fulsh privileges 回車,樓主就安心吃飯去了。
技術分享圖片

2.重點來了,待樓主用餐歸來,(還在樓下打了盤王者農藥,排位兩連跪(┬_┬)),
上午發來需求的同事找我了。
技術分享圖片

3.柳暗花明
瞬間蒙圈的我,回了個稍等,就趕緊去查原因了。
在反復確認grant沒問題後,樓主持續蒙圈了。此時距離接到這個問題,已經過去了20分鐘,
甚是焦急啊,明明一個小需求怎麽會這樣呢。
就在樓主萬分無奈時,突然點到設計視圖的高級頁面,看到了安全性‘Definer’這個點。

技術分享圖片

萬能的某度給了我答案,當視圖的安全性為DEFINER時,數據庫中存在DEFINER指定的用戶,也就是圖中的定義者所填寫的。並且該用戶擁有對應的權限,才能執行。與當前用戶是否有權限無關。

當視圖的安全性為INVOKER時,只要執行者有執行權限,就可以成功執行。
上圖時我修改後問題解決的圖了,因為當時寫的是‘[email protected].%.%’且視圖的安全性為DEFINER引起的。當然,如果開發不是指定帳號只讀的話,也可以將安全性定義INVOKER,這樣只要有對這個視圖有權限的都可以查看了。

參考資料: http://pdf.us/2018/02/24/679.html

Mysql視圖權限設置的踩坑經歷