Mysql權限設置

端午在外玩的時候,被告知Mysql的主從數據庫連接出了問題,急忙忙的趕回家檢查,發現是某個系統的bug導致本該只讀的表被插入了數據。

接着與主庫同步過來的數據衝突。

爲了杜絕此類事情發生,決定給系統設置單獨的權限用戶。

首先建立用戶

create user puhuo identified by 'XXX'

flush privileges

切到puhuo用戶,會發現看不見從庫的schema

賦予從庫的讀權限

grant select on cardb.* to puhuo

切到puhuo用戶,會發現從庫的schema及表可見,但不能進行dml操作

接着賦予指定表,dml操作權限

grant update,delete,insert on cardb.t_cnct_car to puhuo;

切到puhuo用戶,發現指定表的dml操作OK了

接着需要給PROCEDURE付權限

grant execute on procedure cardb.test to puhuo;

接着問題來了,puhuo用戶有了procedure的執行權限,但procedure內有一個對t_price_base表的insert操作,puhuo並沒有對於t_price_base的dml操作權限。

執行結果會怎樣?

Error Code: 1142. INSERT command denied to user 'puhuo'@'10.167.219.133' for table 't_price_base'

檢查procedure頭髮現

DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `test`()
    SQL SECURITY INVOKER
BEGIN

說明權限依賴於調用者的權限。

如果稍加修改,SQL SECURITY DEFINER
此時,權限依賴於定義者也就是root的權限。

再次執行,執行成功。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章