all許可權使用者無法執行儲存過程
我們使用儲存過程的時候,往往只注意要給呼叫儲存過程的賬號賦予相應許可權,但是實際上儲存過程定義使用者與這個儲存過程能否被執行有直接關係,如果不知道這點,即使呼叫儲存過程的賬號具備存相關許可權,一樣還是不能執行儲存過程。
語法:
CREATE DEFINER=`xx`@`%` PROCEDURE `mmm`
這裡DEFINER有兩種模式Security definer和Security invoker
Security definer:
definer:在執行儲存過程前驗證definer對應的使用者如:xx@%是否存在,以及是否具有執行儲存過程的許可權。
Security invoker
invoker:在執行儲存過程時判斷呼叫該儲存過程的使用者是否有相應許可權。
其實,用簡單明瞭語言解釋下可能更容易理解:
SECURITY DEFINER 表示定義者必須有相關許可權。
SECURITY INVOKER 表示只要呼叫者有相關許可權即可。
問題描述:
今天一個別的部門的DBA同事,要我幫忙處理一個問題。說他們業務開發的程式不能正確執行儲存過程,由於他們的很多業務邏輯關係都是放在儲存過程中判斷,而非程式判斷。所以這個問題極其重要,直接導致了業務不可用。前端報錯感覺是許可權不夠,且所有呼叫儲存過程的賬號都是同一個aaa(這裡用aaa表示業務賬戶),檢查了這個使用者的許可權,沒有問題,最後甚至賦予了all許可權,但問題依舊。到這他和他們部門同事都認為不再是許可權不夠的問題。嘗試了一些別的方法都無法解決,問題一直就卡在這了,所有人在那著急。
我上去分析了一下,確實如他們描述一樣。到庫上隨機看了一個儲存過程c:
CREATE DEFINER=`xx_user`@`%` PROCEDURE `DBQ_MMM` 其它所有儲存過程皆是如此。
show grants for 'xxx_user'@'%' 檢視發現沒有EXECUTE 執行儲存過程的這個許可權
接著,show procedure status like 'c'
procedure.jpg
注意Security_type這裡是DEFIN,所以雖然前端程式使用的是具有all許可權的aaa賬戶,但是定義者xxx_user沒有執行許可權。儲存過程依舊不能被執行,也就難怪為啥糾了結半天最大許可權的使用者依然還是沒有許可權了。至於這個使用者的EXECUTE許可權是人為revoke誤操作,還是以前使用的是INVOKER模式,那就不知道了。但是前者99%的可能。虛驚一場,真是小問題險些造成大事故啊。
解決方法:
修改儲存過程定義使用者,給一個具有執行許可權的使用者即可
如果是從別的庫導過來的,有大量儲存過程一個個修改太麻煩,提供兩個思路:
在匯出的sql中用sed替換,然後再匯入到 新庫中。
直接建立一個與原先庫中的定義使用者一樣的使用者。
©著作權歸作者所有:來自51CTO部落格作者等飛的旗的原創作品,如需轉載,請註明出處,否則將追究法律責任
故障mysql儲存過程
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2820737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程的許可權問題MySql儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- 檢視、儲存過程以及許可權控制練習儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- 普通使用者許可權執行dockerDocker
- Vim儲存時許可權不足
- mysql 給了使用者所有許可權ALL PRIVILEGES,但是該使用者沒有grant許可權MySql
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- 低權使用者呼叫高權使用者建立的儲存過程出錯儲存過程
- 無 sudo 許可權使用者的生存指南
- 應用儲存過程執行報錯解決方案儲存過程
- 如何查詢一個儲存過程是否在執行儲存過程
- MySQL如何查詢all有哪些許可權?MySql
- 儲存過程_造使用者資料儲存過程
- SQLServer查詢使用者儲存過程SQLServer儲存過程
- mysql無法建立儲存過程問題 ERROR 1307 (HY000)MySql儲存過程Error
- Linux檔案讀、寫、執行許可權Linux
- PostgreSQL_通過schema控制使用者許可權SQL
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- linux使用者許可權Linux
- Spring security(五)-完美許可權管理系統(授權過程分析)Spring
- vim儲存只讀檔案時獲得sudo許可權
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- Oracle儲存過程Oracle儲存過程
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- php執行shell指令碼需要sudo許可權PHP指令碼
- Android 6.0 在執行時請求許可權Android
- mysql連線無許可權MySql
- MySQL 儲存過程進行切換表MySql儲存過程
- Linux使用者與許可權Linux
- mysql使用者許可權管理MySql
- 不為人知的技術--Oracle並行非同步執行儲存過程Oracle並行非同步儲存過程