Come eseguire il codice trigger solo per un'applicazione specifica?


8

Mi chiedevo se è possibile abilitare un trigger solo per la mia applicazione corrente e non per qualsiasi sql eseguito sul tavolo.

La situazione:

Esistono due applicazioni che lavorano sullo stesso database. App1 e App2.

Ho un trigger su "MyTable" che dovrebbe essere attivato solo quando App1 sta eseguendo una query, ma non quando App2 lo sta facendo.


Beh, è ​​logico. non è vero? dove vorresti avere il nome dell'app? Se hai accesso ad esso nel trigger (inserito), allora è facile.
Super Peon,

1
Patric, in alternativa all'utilizzo APP_NAME(), è anche possibile utilizzare SET CONTEXT_INFO. SET CONTEXT_INFOè comunemente usato per inviare informazioni a trigger come questo.
Nick Chammas,

Risposte:


10

Sebbene non sia un buon design, è fattibile. Dovrai inserire la logica nel trigger in modo che il codice venga eseguito solo quando è collegata l'applicazione corretta.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end

8
In questo caso specifico potrebbe non essere un problema, ma altri potenziali lettori dovrebbero tenere presente che app_name()è molto semplice eseguire lo spoofing tramite le proprietà della stringa di connessione.
Aaron Bertrand

4
Sì, molto facile da falsificare. Non farlo per motivi di sicurezza, ma per ovviare a piccole carenze del software o altri trucchi convenienti, probabilmente stai bene. Ne abbiamo alcuni che lo fanno.
db2

1
Verissimo, sarebbe MOLTO facile spostarsi. Ma supponendo che non ci siano cattive intenzioni degli utenti dell'applicazione (non riesco a credere di averlo messo) funzionerà. Non è la migliore idea, ma farà il lavoro. Jon, grazie per la formattazione. Non avrei provato a farlo sul mio telefono.
mrdenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.