Как получить 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
Я очень хочу знать:
-
Что такое net_address здесь? Является ли MAC-адрес или какой-то IP-адрес и т.д.?
-
Есть ли способ конвертировать 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;