I privilegi delle Stored Routine

E' importante decidere con cura i privilegi associati alle Stored Function e delle Stored Procedure. Di seguito è spiegato come funzionano.

Creare Stored Routine

  • Per creare una Stored Routine, è necessario il privilegio CREATE ROUTINE. Il privilegio SUPER è necessario se si dichiara un DEFINER che non è il creatore stesso (si veda la clausola DEFINER sotto). Questo privilegio è necessario anche se si utilizza il binary logging basato sulle istruzioni. Si veda Binary Logging of Stored Routines per ulteriori dettagli.

Modificare le Stored Routine

  • Per modificare o eliminare una Stored Routine, è necessario il privilegio ALTER ROUTINE. Al creatore della Routine è temporaneamente garantito il permesso di eliminare o modificare la Routine creata, a meno che la variabile automatic_sp_privileges sia impostata a 0 (il valore predefinito è 1).

Eseguire le Stored Routine

  • Per eseguire una Stored Routine, è necessario il privilegio EXECUTE. Anche questo privilegio è garantito al creatore della Routine, a meno che la variabile automatic_sp_privileges sia impostata a 0.
  • La clausola SQL SECURITY (per default DEFINER) specifica quali privilegi devono essere usati quando la Routine viene chiamata. Se SQL SECURITY è INVOKER, il corpo della funzione viene eseguito utilizzando i privilegi dell'utente che chiama la funzione. Se SQL SECURITY è DEFINER, il corpo della funzione viene sempre valutato usando i privilegi dell'account del definer. DEFINER è il default. Perciò, per default, anche gli utenti che accedono al database associato alla Stored Routine possono eseguire la Routine e potenzialmente eseguire operazioni per le quali normalmente non avrebbero i permessi.
  • Il creatore di una Routine è l'account che ha eseguito l'istruzione CREATE FUNCTION o CREATE PROCEDURE, a prescindere dal fatto che la clausola DEFINER sia presente. Il definer per default è il creatore, a meno che non sia specificato diversamente.
  • Il server modifica automaticamente i privilegi nella tabella mysql.proc nel modo opportuno, ma non cerca le modifiche effettuate manualmente.

La clausola DEFINER

Se non è specificato, il DEFINER è l'account che ha creato la Stored Routine o la vista. Se tale account dispone del privilegio SUPER, può specificare un altro account come DEFINER.

La clausola SQL SECURITY

Questa clausola specifica il contesto nel quale la Stored Routine o la vista viene eseguita. Può assumere due valori - DEFINER o INVOKER. DEFINER è l'account specificato come DEFINER quando la Stored Routine o la vista è stata creata (vedi sopra). INVOKER è l'account che invoca la Routine o la vista.

Come esempio prendiamo una Routine, creata da un superuser che è specificato come DEFINER, ed elimina tutti i record di una tabella. Se SQL SECURITY=DEFINER, chiunque può eseguire la Routine, che abbia il privilegio delete o meno. Se SQL SECURITY = INVOKER, la Routine elimina i record solo se l'account che la invoca ha i permessi per eseguire questa azione.

INVOKER di solito è meno rischioso, perchè non permette agli utenti di eseguire azioni che normalmente non potrebbero eseguire. Tuttavia non è raro che gli account abbiano permessi relativamente limitati, e che gli sia specificamente garantito l'accesso alle Routine, che sono poi invocate nel contesto DEFINER.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.