Bagaimana membuat kode pemicu hanya dijalankan untuk aplikasi tertentu?

8

Saya bertanya-tanya apakah mungkin untuk mengaktifkan pemicu hanya untuk aplikasi saya saat ini dan tidak untuk sql yang dieksekusi terhadap tabel.

Situasi:

Ada dua aplikasi yang bekerja pada database yang sama. App1 dan App2.

Saya memiliki pemicu pada 'MyTable' yang seharusnya hanya dipecat ketika App1 menjalankan kueri, tetapi tidak ketika App2 melakukannya.

Patric
sumber
Yah itu logis. bukan? di mana Anda memiliki nama aplikasi? Jika Anda memiliki akses ke sana di pelatuk (dimasukkan) maka mudah.
Super Peon
1
Patric, sebagai alternatif untuk menggunakan APP_NAME(), Anda juga dapat menggunakan SET CONTEXT_INFO. SET CONTEXT_INFObiasanya digunakan untuk mengirim info ke pemicu seperti ini.
Nick Chammas

Jawaban:

10

Meskipun bukan desain yang bagus, itu bisa dilakukan. Anda harus memasukkan logika ke dalam pelatuk sehingga kode hanya dijalankan ketika aplikasi yang benar terhubung.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end
mrdenny
sumber
8
Ini mungkin tidak menjadi perhatian dalam kasus khusus ini, tetapi pembaca potensial lainnya harus mencatat bahwa app_name()sangat mudah untuk dipalsukan melalui properti string koneksi.
Aaron Bertrand
4
Yup, sangat mudah tipuan. Jangan lakukan ini untuk tujuan keamanan, tetapi untuk mengatasi kekurangan perangkat lunak kecil, atau trik mudah lainnya, Anda mungkin baik-baik saja. Kami punya beberapa yang melakukan ini.
db2
1
Sangat benar, ini akan SANGAT mudah untuk berkeliling. Tetapi dengan asumsi bahwa tidak ada niat sia-sia dari pengguna aplikasi (saya tidak percaya saya hanya mengatakannya) itu akan berhasil. Bukan ide terbaik, tetapi itu akan melakukan pekerjaan. Jon, terima kasih sudah memformat. Tidak akan mencoba melakukan itu di ponsel saya.
mrdenny