2017-03-03 102 views
0

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權限?

+0

你試過並找出答案嗎? – tadman

+0

@tadman Barmar的回答很完美! – ln9187

回答

1

這是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

+0

太棒了,謝謝! – ln9187