若使用ROOT用戶來創建一個存儲過程 ,然後賦予另一個用戶此存儲過程的執行權限,則此用戶將可以進行一些ROOT賬號才可以進行的操作。但是這些操作是預先被定義在存儲過程裡面的。
比如ROOT在test數據庫創建了一個讀取文件的存儲過程readf:
然後使用一個沒有FILE權限但是有EXECUTE權限的賬號來調用這個存儲過程,擁有EXECUTE權限才可以調用存儲過程:
可以發現文件照樣被讀出來了。。
利用
來刪除這個存儲過程
下面這段代碼也許可以說明一些什麼:
以ROOT身份創建這個存儲過程 ,再以ROOT身份來執行
結果是:
+——————————————+
| whoami |
+——————————————+
| user():root@localhost |
| current_user():root@localhost |
+——————————————+
再以ninty賬號來執行這個存儲過程:
+—————————————–+
| whoami |
+—————————————–+
| user():ninty@localhost |
| current_user():root@localhost |
+—————————————–+
PS:
可以通過show grants來看看自己是否有EXECUTE的權限
查看MYSQL中存儲過程的方法:
1.
2.
3.
SQL SERVER 05得到用戶自定義存儲過程:
或者可以查詢sys.procedures,不過聽人說好像因為一些未知的原因,從這裡查出的數據並不全