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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程與許可權儲存過程
- 【許可權】儲存過程執行時,報ORA-01031許可權不足儲存過程
- 儲存過程與許可權(二)儲存過程
- mysql儲存過程的許可權 definerMySql儲存過程
- 資料庫許可權-儲存過程資料庫儲存過程
- MySQL儲存過程的許可權問題MySql儲存過程
- 讓使用者擁有儲存過程的除錯許可權儲存過程除錯
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- 儲存過程許可權__Authid Current_User儲存過程
- ORACLE中儲存過程的許可權問題Oracle儲存過程
- 檢視、儲存過程以及許可權控制練習儲存過程
- Sqlserver 2014 用指令碼批次賦予使用者可以執行儲存過程的許可權SQLServer指令碼儲存過程
- 定義者許可權儲存過程role無效,必須要有顯式授權儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- 呼叫者儲存過程訪問許可權問題儲存過程訪問許可權
- 解決執行儲存過程出現許可權不足問題(ORA-01031)儲存過程
- 在儲存過程中使用EXECUTE IMMEDIATE報許可權問題儲存過程
- 儲存過程,角色相關的呼叫者許可權和定義者許可權問題儲存過程
- MYSQL儲存過程許可權問題分析(Security_type詳解)MySql儲存過程
- 關於檢視和儲存過程的許可權問題探究儲存過程
- 儲存過程中使用Dbms_Scheduler包的許可權問題儲存過程
- 普通使用者許可權執行dockerDocker
- Vim儲存時許可權不足
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- oracle使用者crontab無許可權使用和不能執行計劃Oracle
- /*動態執行儲存過程DEMO*/儲存過程
- 詳解Oracle建立使用者許可權全過程Oracle
- 儲存過程語法儲存過程
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- Android資料儲存之Android 6.0執行時許可權下檔案儲存的思考Android
- 檢視正在執行的儲存過程儲存過程
- 執行Sybase儲存過程並返回ResultSet儲存過程
- 使用ADO執行儲存過程 (轉)儲存過程
- 使用Command執行儲存過程 (轉)儲存過程
- oracle的儲存許可權的檢視Oracle
- Android許可權管理之Android 6.0執行時許可權及解決辦法Android
- 儲存過程基本語法儲存過程
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程