端午在外玩的時候,被告知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的權限。
再次執行,執行成功。