MySQL的存儲過程,我有兩個MySQL用戶:允許非SELECT權限用戶運行具有SELECT查詢
- mysql_user_1
- mysql_user_2(僅執行許可)
mysql_user_1創建存儲程序getRecord(int uid_of_record)
其中運行SELECT * FROM TABLE WHERE uid=?
。 mysql_user_2
可以執行該存儲過程而不具有SELECT
權限?
MySQL的存儲過程,我有兩個MySQL用戶:允許非SELECT權限用戶運行具有SELECT查詢
mysql_user_1創建存儲程序getRecord(int uid_of_record)
其中運行SELECT * FROM TABLE WHERE uid=?
。 mysql_user_2
可以執行該存儲過程而不具有SELECT
權限?
這是MySQL文檔Access Control for Stored Programs and Views在詳細解釋。
存儲過程可以與被定義之一:
SQL SECURITY DEFINER
或
SQL SECURITY INVOKER
如果它是DEFINER
,該過程與誰定義的過程的用戶的權限來執行;在您的情況下,如果mysql_user_1
具有SELECT
權限,則該過程將適用於mysql_user_2
。
如果是INVOKER
,程序與運行程序的用戶的權限執行。在這種情況下,該程序不適用於mysql_user_2
。
如果你沒有在程序這一條款,則默認爲DEFINER
。
太棒了,謝謝! – ln9187
你試過並找出答案嗎? – tadman
@tadman Barmar的回答很完美! – ln9187