Как заставить код триггера выполняться только для конкретного приложения?

8

Мне было интересно, если это возможно, чтобы включить триггер только для моего текущего приложения, а не для любого sql, выполняемого по таблице.

Ситуация:

В одной базе данных работают два приложения. App1 и App2.

У меня есть триггер на «MyTable», который должен быть запущен только когда App1 выполняет запрос, но не когда App2 делает это.

Patric
источник
Ну, это логично. не так ли? где бы вы имели имя приложения? Если у вас есть доступ к нему в триггере (вставлен), то это легко.
Супер Пион
1
Патрик, в качестве альтернативы использования APP_NAME(), вы также можете использовать SET CONTEXT_INFO. SET CONTEXT_INFOобычно используется для отправки информации на триггеры, подобные этому.
Ник Чаммас

Ответы:

10

Хотя не очень хороший дизайн, это выполнимо. Вам нужно будет поместить логику в триггер, чтобы он выполнялся только тогда, когда подключено правильное приложение.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end
mrdenny
источник
8
Это не может быть проблемой в этом конкретном случае, но другие потенциальные читатели должны заметить, что app_name()очень легко подделать через свойства строки подключения.
Аарон Бертран
4
Да, очень легко подделать. Не делайте этого в целях безопасности, но для устранения мелких недостатков программного обеспечения или других удобных трюков, вы, вероятно, в порядке. У нас есть несколько, которые делают это.
db2
1
Очень верно, это было бы ОЧЕНЬ легко обойти. Но при условии, что у пользователей приложения нет никаких намерений (я не могу поверить, я просто сказал это), оно будет работать. Не самая лучшая идея, но она сработает. Джон, спасибо за форматирование. Не собирался делать это на моем телефоне.
Мрденный