28 .net sql sql-server asp.net sql-server-2008
我有一个插入/更新/删除触发器.这工作正常.此外,我需要客户端的IP地址来进行更改.我需要在T-SQL中,这意味着,不是在任何Web表单中,而是在SQL/T-SQL中,而我的触发器将被触发.
我也去了,并得到了master数据库中存储的程序xp_cmdshell,当执行时ipconfig我们可以得到IP地址.我认为这只有在您拥有数据库的管理权限时才有效.我的托管是一个共享托管,所以我没有这样的特权.还有其他出路吗?
请帮忙
提前致谢
请注意:我的SQL Server 2008数据库没有管理权限.我需要一个经过身份验证的用户的解决方案.
另一个更新:
我有解决方案,对我的方案有用的查询是
SELECT hostname, net_library, net_address
FROM sys.sysprocesses
WHERE spid = @@SPID
Run Code Online (Sandbox Code Playgroud)
它根据需要执行,但只有一个问题,即net_address不是IP格式.以下是我的结果:
hostname net_library net_address
IPC03 TCP/IP AE8F925461DE
Run Code Online (Sandbox Code Playgroud)
我很想知道:
什么是net_address?是MAC地址还是某些IP地址等?
有没有办法将net_address转换为ip?
谦虚的要求:
在回答/评论/ downvoting之前,我会要求你首先彻底解决这个问题.我发现有些人在没有正确处理问题的情况下进行了评论/评论.没有问题,每个人都会犯错误.但不是每次都犯错误.:)
huM*_*pty 39
我发现了一些可能对你有用的东西
CREATE FUNCTION [dbo].[GetCurrentIP] ()
RETURNS varchar(255)
AS
BEGIN
DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;
Return @IP_Address;
END
Run Code Online (Sandbox Code Playgroud)
另请查看有关获取客户端IP地址的这篇文章
小智 27
你可以尝试这个解决方案.它甚至适用于共享主机:
select CONNECTIONPROPERTY('client_net_address') AS client_net_address
Run Code Online (Sandbox Code Playgroud)
最终加入两个系统表:
SELECT hostname,
net_library,
net_address,
client_net_address
FROM sys.sysprocesses AS S
INNER JOIN sys.dm_exec_connections AS decc ON S.spid = decc.session_id
WHERE spid = @@SPID
Run Code Online (Sandbox Code Playgroud)
输出:
hostname | net_library | net_address | client_net_address
PIERRE | TCP/IP | 0090F5E5DEFF| 10.38.168.5
Run Code Online (Sandbox Code Playgroud)
它只需要一行代码
SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
Run Code Online (Sandbox Code Playgroud)