是否可以仅通过Management Studio在表上使用触发器?

时间:2014-07-28 11:18:51

标签: sql-server triggers

我在表上有一个触发器,用于将用户活动记录到审计表中。事实证明这很有用,但我没有找到区分我的应用程序(ASP.NET)执行的查询和通过Management Studio执行的查询的方法。

每当我的应用程序尝试在我的数据库上执行任何存储过程时,我一直计划确保在审计表上运行插入查询,但我意识到触发器无论如何都会触发。

是否有一种限制触发器的方法仅在SQL Server Management Studio(SSMS)的用户执行查询时才起作用,或者触发器始终触发,因此我应该重新考虑如何记录我的用户&# 39; s活动?

就像后期脚本一样,我无法利用SSMS通常允许的审核工具,因为我在Amazon RDS实例上托管我的数据库。

2 个答案:

答案 0 :(得分:1)

您可以使用DDL触发器进行登录,以便控制每个用户的用户和AAP_Name()。 以下查询是DDL触发器的示例代码:

CREATE TRIGGER [ddl_login_Audit] ON ALL SERVER 
 FOR LOGON AS 
 begin
     DECLARE @LogonTriggerData xml,
    @HostName varchar(500),
    @AppName varchar(500)

    SET @LogonTriggerData = eventdata()
    SET @HostName = HOST_NAME()
    SET @AppName = APP_NAME()

    IF (@APPName = 'Your application name') BEGIN
       ROLLBACK 
    End     
 END

GO

答案 1 :(得分:0)

我尝试了Mehdi Lotfi的解决方案,但似乎Amazon RDS只允许某些用户级别使用此触发器。

我可能会捣乱一段时间以允许执行用户获得更多权限,但目前我不愿意这样做。

相反,我使用APP_Name()来确定我的应用程序名称,在我的web.config文件中设置为我的ASP.Net应用程序的一部分,然后仅在{{1}时才继续触发}等于APP_Name()

例如:

Microsoft SQL Server Management Studio - Query