我需要为支持Sql Server 2008的系统提供广泛的审计功能。由于我打算使用LINQ(没有存储过程),因此数据库将是一个干净的零联系数据存储库。
但是,我需要实际记录数据库中发生的每个更改的快照。所以,我认为我应该使用触发器。但是,我需要特定用户的用户ID(而不是连接字符串用户ID)才能流入数据库。
在oracle中,我本来应该能够设置一个PROXY USER,触发器就可以选择它。最后我检查过,Sql Server中没有代理用户概念。
有没有人知道我是否可以使用任何扩展程序属性来浏览经过身份验证的用户名?
ps:我不介意对连接池的影响(如果有的话)。
感谢。 P
答案 0 :(得分:2)
我没有尝试过这个,但是从parameters in a connection string开始,可以在T-SQL中检索这两个(可能更多):APP_NAME()和HOST_NAME()。
答案 1 :(得分:0)
我通过将@@SPID与当前用户ID相关联来解决此问题。
您需要一个结构为SPID int,UserID为int且具有相同参数的SP的表。如果SPID存在,SP将删除具有SPID的记录,并插入新对。
在触发器中,您可以通过使用@@ SPID查询此表来检索用户ID。
每当打开连接时都需要调用SP。 (你没有提到你想如何访问数据库)