我在表上有一个触发器,用于将用户活动记录到审计表中。事实证明这很有用,但我没有找到区分我的应用程序(ASP.NET)执行的查询和通过Management Studio执行的查询的方法。
每当我的应用程序尝试在我的数据库上执行任何存储过程时,我一直计划确保在审计表上运行插入查询,但我意识到触发器无论如何都会触发。
是否有一种限制触发器的方法仅在SQL Server Management Studio(SSMS)的用户执行查询时才起作用,或者触发器始终触发,因此我应该重新考虑如何记录我的用户&# 39; s活动?
就像后期脚本一样,我无法利用SSMS通常允许的审核工具,因为我在Amazon RDS实例上托管我的数据库。
答案 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