sql获得客户端IP

doyouknowm 2009-02-25 06:20:13
我需要在服务器上记录客户端的访问记录,也包括IP,找了一下一个方法是先取得机器名然后ping出IP,需要用到xp_cmdShell这个存储过程,而这个存储过程只能sysAdmin用户才能调用,也看了邹建大哥《如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程》的文章,http://blog.csdn.net/zjcxc/archive/2008/09/19/2950793.aspx。但我的sql是2000,那样的话好像是不支持,请问还有别的方法实现获得IP的方法么?或者说如何在不是sysadmin用户的条件下也能使用这个存储过程。请大家多多指教
先谢谢了。
...全文
87 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2009-02-25
  • 打赏
  • 举报
回复
2000也能用的,你的用不了可能是防火墙或者权限的问题

个人认为,获取客户端的IP通过程序来处理会好一点。

帮顶...
昵称被占用了 2009-02-25
  • 打赏
  • 举报
回复
用SQL获取IP本来就不应该,应该用其他方法获取
you_tube 2009-02-25
  • 打赏
  • 举报
回复
IF OBJECT_ID(dbo.GetClientIP) IS NOT NULL 
DROP PROC dbo.GetClientIP
GO
CREATE PROCEDURE dbo.GetClientIP
AS
DECLARE @ip VARCHAR(20)
DECLARE @hst VARCHAR(20)
DECLARE @sql VARCHAR(100)
DECLARE @str VARCHAR(100)
SET @str = 'PING ' + HOST_NAME() + ' -n 1'
CREATE TABLE #tmp ( aa VARCHAR(200) )
INSERT
#tmp
EXEC master..xp_cmdshell @str
SELECT TOP 1
@ip = REPLACE(LEFT(aa , CHARINDEX(':' , aa) - 1) , 'Reply from ' , '')
FROM #tmp
WHERE aa LIKE 'reply from %:%'
DROP TABLE #tmp
SELECT @ip
RETURN ( 0 )
Go

或者直接使用动态管理视图
selct client_net_address,local_net_address,connection_id
from sys.dm_exec_connections

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧