0

我在 SQL 表上设置了一个触发器用于审计跟踪目的。这是触发代码。

ALTER TRIGGER [dbo].[tri_bowzer_UPDATE] ON [dbo].[Bowzer] 
For Update 
AS
    INSERT Table_Audit(TableName, Action, UserName, ComputerName) 
       SELECT  
          'bowzer', 'U', suser_sname(), host_name()

它工作正常,并在桌面应用程序中显示用户名和计算机(客户端)名称。但是在 ASP.NET 应用程序中,我使用了一个常见的 SQL 登录名,以便可以使用此登录名执行数据库操作。我了解 SQL Server 由于此 ID 正在获取服务器机器名称。但是,我想在执行数据库操作时捕获客户端计算机名称。

可以进行哪些更改来获取客户端计算机名称?

4

3 回答 3

0

这种设计并不真正适合您想要实现的目标。我会考虑在您的数据库中添加更新的列,您可以在其中存储更新数据的用户的用户 ID 或机器名称。

这样,您将保持触发器逻辑简单,并避免与数据库的过多连接可能会降低性能。

于 2013-02-18T16:11:45.127 回答
0

您需要调整连接字符串以指定连接字符串属性 WSID(工作站 ID),如下所示

string strconn = "data source=SQLSERVER;initial catalog = DBNAME ; uid=sa;pwd=password;  WSID=" + (System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName);

然后您将HOST_NAME()在触发器中获得值作为客户端计算机名称

MSDN:http: //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

于 2013-02-18T07:29:43.537 回答
0

您可以使用 T-SQL 设置客户端的 IP 地址,并使用该函数SET CONTEXT_INFO在触发器中检索此数据。CONTEXT_INFO

于 2013-02-18T10:18:42.310 回答