Sì, questo è possibile.
I trigger vengono eseguiti con i privilegi della funzione di trigger, per impostazione predefinita su SECURITY INVOKER
che significa che la funzione di trigger viene effettivamente eseguita con i privilegi di current_user
, nel caso in cui si inseriscono le righe.
Se l'utente corrente non dispone dei privilegi necessari per le tabelle su cui è attiva la funzione di trigger, l'operazione originale nella tabella sottostante verrà ignorata.
Tuttavia, è possibile utilizzare SECURITY DEFINER
per la funzione trigger di avere questa funzione di corsa con i privilegi del OWNER
della funzione.
Se si dispone di un superuser propria la funzione trigger, può fare tutto ciò - che sarebbe un possibile rischio di sicurezza. Considera le istruzioni nel manuale su Writing SECURITY DEFINER
Functions Safely.
Ma è più saggio fare un semplice ruolo con solo i privilegi necessari OWNER
della funzione di trigger. Puoi anche solo creare un ruolo "daemon" senza login, fungendo da pacchetto privilegiato per tali operazioni. Dovresti quindi concedere solo i privilegi necessari (su schemi, tabelle, sequenze ...) a questo ruolo daemon. Per progetti più sofisticati è necessario raggruppare i privilegi in "ruoli di gruppo" (ancora, nessun accesso) e concedere questi ruoli di gruppo ai ruoli che ne hanno bisogno (per il ruolo del daemon in questo esempio), rendendoli effettivamente "membri del gruppo". Io lo faccio spesso.
Considerare anche this related question on dba.SE in merito ai privilegi sulla funzione stessa.
fonte
2013-07-26 17:04:57
Se il trigger aggiorna le righe, che vengono inserite, è un segno di progettazione errata. Puoi mostrare come alcuni dei tuoi trigger o dire, cosa fai con loro? –
Se è necessario aggiornare un campo specifico di un record inserito, è sufficiente assegnare il valore desiderato a "NUOVO.specifico". Non hai bisogno di un aggiornamento separato. –
Non l'ho progettato, ma non so se avrei fatto qualcosa di meglio per essere onesto. Non ho ancora guardato i trigger. Forse potrei usare questo, non lo so. Ti farò sapere. Grazie – Paco