特定のアプリケーションに対してのみトリガーコードを実行させる方法は?


8

テーブルに対して実行されたSQLではなく、現在のアプリケーションに対してのみトリガーを有効にできるかどうか疑問に思っていました。

状況:

同じデータベースで作業している2つのアプリケーションがあります。App1およびApp2。

「MyTable」にトリガーがあります。これは、App1がクエリを実行しているときにのみ起動し、App2が実行しているときは起動しないようにします。


まあその論理。ですよね?アプリ名はどこにありますか?トリガー(挿入)でアクセスできる場合は、簡単です。
スーパーペオン2013年

1
Patricでは、を使用する代わりに、を使用APP_NAME()することもできますSET CONTEXT_INFOSET CONTEXT_INFOこのようなトリガーに情報を送信するために一般的に使用されます。
Nick Chammas 2013年

回答:


10

良いデザインではありませんが、実行可能です。正しいアプリケーションが接続されている場合にのみコードが実行されるように、トリガーにロジックを配置する必要があります。

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

8
この特定のケースでは問題にならない可能性がありますが、他の潜在的な読者はapp_name()、接続文字列のプロパティを介して非常に簡単になりすましに注意する必要があります。
アーロンバートランド

4
うん、なりすましは非常に簡単です。セキュリティの目的でこれを行わないでください。ただし、ソフトウェアの軽微な欠陥やその他の便利なトリックを回避するには、おそらく問題はありません。これを行うものはいくつかあります。
db2 2013年

1
非常に本当ですが、これは簡単に回避できます。しかし、アプリケーションユーザーの意図が何もないことを前提にすれば(私はそれを置くだけだとは信じられません)、うまくいきます。最高のアイデアではありませんが、それで十分です。ジョン、フォーマットしてくれてありがとう。私の電話でそれをしようとするつもりはなかった。
mrdenny 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.