Как получить IP-адрес клиента от самого SQL Server 2008? - PullRequest
27 голосов
/ 30 марта 2012

У меня есть триггер для вставки / обновления / удаления. Это работает нормально. Также мне нужен IP-адрес клиента, с которого вносятся изменения. Это мне нужно в T-SQL, то есть не в любой веб-форме, а в SQL / T-SQL, пока мой триггер будет запущен.

Также я перешел на другую сторону и понял, что в основной базе данных есть хранимая процедура с именем xp_cmdshell, которая при выполнении с ipconfig позволяет получить IP-адрес. Я думаю, что это будет работать только тогда, когда у вас есть административный доступ к базе данных. Мой хостинг - это виртуальный хостинг, поэтому у меня нет такой привилегии. Есть ли другой выход?

Пожалуйста, помогите

Заранее спасибо

Обратите внимание : у меня нет прав администратора в моей базе данных SQL Server 2008. Мне нужно решение как аутентифицированный пользователь.

Еще одно обновление:

У меня есть решение, запрос, который будет работать для моего сценария:

SELECT hostname, net_library, net_address
FROM sys.sysprocesses 
WHERE spid = @@SPID

Выполняется по мере необходимости, но есть только одна проблема - net_address не в формате IP. ниже мой результат:

hostname    net_library     net_address
IPC03       TCP/IP          AE8F925461DE  

Я хочу знать:

  1. Что такое net_address здесь? Это MAC-адрес или какой-то другой IP-адрес и т. Д.?

  2. Есть ли способ конвертировать net_address в ip?

Смиренный запрос :

Прежде чем отвечать / комментировать / понижать голосование, я бы попросил вас сначала тщательно разобраться с вопросом. Я нашел, что некоторые парни комментировали / понижали голос без должного прохождения вопроса. Нет проблем, все делают ошибки. Но не каждый раз ошибаюсь. :)

Ответы [ 6 ]

37 голосов
/ 30 марта 2012

Я нашел что-то, что могло бы работать для вас

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

С Как получить IP-адрес клиента в SQL Server

Также посмотрите на эту статью о Получить IP-адрес клиента

24 голосов
/ 24 августа 2012

Вы можете попробовать это решение .Он даже работает на виртуальном хостинге:

select CONNECTIONPROPERTY('client_net_address') AS client_net_address 
6 голосов
/ 24 октября 2013

В конечном итоге объедините две системные таблицы:

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

Выход:

hostname | net_library | net_address | client_net_address    
PIERRE   | TCP/IP      | 0090F5E5DEFF| 10.38.168.5
5 голосов
/ 02 июля 2014

требуется всего одна строка кода

 SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
1 голос
/ 23 октября 2015

Я не смог получить точный числовой IP-адрес, вместо этого я получил значение NULL из-за ограничения приведенных выше утверждений.Пределом является то, что вы получаете IP-адреса, только если вы подключены через TCP / IP.Если вы используете локальную память и используете общую память, эти атрибуты не существуют.Если вы отключите общую память (или любые протоколы, кроме TCP / IP) с помощью диспетчера конфигурации сервера, вы всегда получите IP-адрес для любого соединения.

Вам лучше всего использовать

SELECT SERVERPROPERTY(N'MachineName');

... который может действовать вместо числового IP-адреса.

0 голосов
/ 06 июня 2018

попробуйте

DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;

select @IP_Address;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...