2017-03-03 7 views
0
SELECT-Abfrage hat

Ich habe zwei MySQL-Benutzer:zulassen Nicht-SELECT-Berechtigung Benutzer MySQL gespeicherte Prozedur auszuführen, die

  • mysql_user_1
  • mysql_user_2 (EXECUTE nur Erlaubnis)

mysql_user_1 eine gespeicherte erstellt Verfahren getRecord(int uid_of_record), die eine SELECT * FROM TABLE WHERE uid=? ausführen. Kann mysql_user_2 die gespeicherte Prozedur ausführen, ohne SELECT Privileg zu haben?

+0

Haben Sie es versucht und herausgefunden? – tadman

+0

@tadman Barmars Antwort ist perfekt! – ln9187

Antwort

1

Dies wird ausführlich in der MySQL-Dokumentation Access Control for Stored Programs and Views erläutert.

Eine gespeicherte Prozedur kann entweder mit definiert werden:

SQL SECURITY DEFINER 

oder

SQL SECURITY INVOKER 

Wenn es DEFINER, die Prozedur mit den Berechtigungen des Benutzers ausführt, die das Verfahren definiert sind; Wenn in Ihrem Fall mysql_user_1 über die Berechtigung SELECT verfügt, funktioniert das Verfahren für mysql_user_2.

Wenn es INVOKER ist, wird die Prozedur mit den Berechtigungen des Benutzers ausgeführt, der die Prozedur ausführt. Die Prozedur funktioniert in diesem Fall nicht für mysql_user_2.

Wenn diese Klausel in der Prozedur nicht vorhanden ist, wird standardmäßig DEFINER verwendet.

+0

Super, danke! – ln9187

Verwandte Themen