如何使触发代码仅针对特定应用程序执行?


8

我想知道是否有可能仅针对我当前的应用程序而不是针对该表执行的任何SQL启用触发器。

情况:

在同一个数据库上有两个应用程序。App1和App2。

我在“ MyTable”上有一个触发器,仅在App1执行查询时才应触发,而在App2执行查询时不应该触发。


那么它的逻辑。是不是?应用名称在哪里?如果在触发器(插入的)中确实可以访问它,那么它很简单。
超级牡丹

1
作为使用的替代APP_NAME(),您也可以使用Patric SET CONTEXT_INFOSET CONTEXT_INFO通常用于向此类触发器发送信息。
Nick Chammas 2013年

Answers:


10

虽然不是一个好的设计,但这是可行的。您需要在触发器中放入逻辑,以便它仅在连接了正确的应用程序后才执行代码。

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

8
在这种特定情况下可能不必担心,但是其他潜在读者应该注意,app_name()通过连接字符串属性很容易欺骗。
亚伦·伯特兰

4
是的,很容易欺骗。不要出于安全目的这样做,但是要解决较小的软件缺陷或其他方便的技巧,您可能还可以。我们有一些这样做。
db2 2013年

1
非常正确,这很容易解决。但是,假设应用程序用户没有任何意图(我不能相信我只是这么说),它将起作用。这不是最好的主意,但会成功。乔恩,谢谢你的格式化。不会尝试在我的手机上这样做。
mrdenny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.