![](/img/trans.png)
[英]Asp.net invalid object name error when running query on SQL Server 2008
[英]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.