繁体   English   中英

使用ASP.NET时在触发器中获取服务器名称的SQL查询

[英]SQL query getting Server name in triggers when using ASP.NET

我在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登录名,以便可以使用此登录名执行数据库操作。 我知道由于此ID,SQL Server正在获取服务器计算机名称。 但是,无论何时执行数据库操作,我都想捕获客户机名称。

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

您需要调整连接字符串以指定connectionstring属性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/zh-CN/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM