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

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

Также я go-ogled, и получил, что есть хранимая процедура в основной базе данных с именем 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?

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

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

Ответ 1

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

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-адреса клиента

Ответ 2

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

select CONNECTIONPROPERTY('client_net_address') AS client_net_address 

Ответ 3

В конечном итоге присоединитесь к двум системным таблицам:

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

Ответ 4

ему нужна только одна строка кода

 SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))

Ответ 5

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

Вы лучше застряли с

SELECT SERVERPROPERTY(N'MachineName');

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

Ответ 6

попробуй это

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

select @IP_Address;