低權使用者呼叫高權使用者建立的儲存過程出錯

weixin_34208185發表於2018-12-22

問題出現

建議

一般情況應該在伺服器為資料庫建立一個單獨的賬號,以用於管理資料庫,並且該使用者許可權應被嚴格控制。而在登入SQL資料庫時,應使用建立的單獨賬號進行資料庫一些DLL定義,如建立觸發器、函式、儲存過程。

問題

承接上面,尤其是儲存過程,因為如果是root等高許可權使用者建立的儲存過程,低權使用者訪問可能出現: Userdoes not have access to metadata required to determine stored procedureparameter types. If rights can not be granted, configure connection with"noAccessToProcedureBodies=true" to have driver generateparameters that represent INOUT strings irregardless of actual parametertypes.

原因

這類錯誤,一般是由於低權使用者訪問了高權使用者建立的儲存過程。

解決辦法:

  1. 連線url使用:
jdbc:mysql://ipaddress:3306/test?noAccessToProcedureBodies=true
複製程式碼
  1. 給相關連線使用者授予許可權:
GRANT SELECT ON mysql.proc TO 'user'@'localhost';
複製程式碼
  1. 右鍵該儲存過程,選擇物件屬性,將定義者改為該低權使用者,或命令修改:
update mysql.proc set DEFINER='usename' WHERE NAME='proc_name' AND db='mydb';
複製程式碼

相關文章