33 votos

SQL - Consulta para obtener la dirección IP del servidor

¿Hay una consulta en SQL Server 2005 que pueda usar para obtener la IP o nombre del servidor?

50voto

Jeff Muzzy Puntos 251
SELECCIONAR  
   CONNECTIONPROPERTY('net_transport') AS net_transport,
   CONNECTIONPROPERTY('protocol_type') AS protocol_type,
   CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
   CONNECTIONPROPERTY('local_net_address') AS local_net_address,
   CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
   CONNECTIONPROPERTY('client_net_address') AS client_net_address 

El código aquí te dará la dirección IP;

Esto funcionará para una solicitud de cliente remoto a SQL 2008 y versiones más nuevas.

Si tienes permitidas las conexiones de Memoria Compartida, entonces al ejecutar lo anterior en el propio servidor te dará

  • "Memoria Compartida" como el valor para 'net_transport', y
  • NULL para 'local_net_address', y
  • '' se mostrará en 'client_net_address'.

'client_net_address' es la dirección de la computadora desde la que se originó la solicitud, mientras que 'local_net_address' sería el servidor SQL (por lo tanto, NULL en conexiones de Memoria Compartida), y la dirección que darías a alguien si no pudiera usar el nombre de NetBios o FQDN del servidor por alguna razón.

Recomiendo firmemente no usar esta respuesta. Habilitar la ejecución de shell es una idea muy mala en un servidor SQL en producción.

27voto

Brian R. Bondy Puntos 141769

Puedes obtener el[hostname]\[instancename] de la siguiente manera:

SELECT @@SERVERNAME;

Para obtener solo el nombre de host cuando tienes el formato nombre de host\nombre de instancia:

SELECT LEFT(ltrim(rtrim(@@ServerName)), Charindex('\', ltrim(rtrim(@@ServerName))) -1)

Alternativamente como señaló @GilM:

SELECT SERVERPROPERTY('MachineName')

Puedes obtener la dirección IP actual utilizando lo siguiente:

create Procedure sp_get_ip_address (@ip varchar(40) out)
as
begin
Declare @ipLine varchar(200)
Declare @pos int
set nocount on
          set @ip = NULL
          Create table #temp (ipLine varchar(200))
          Insert #temp exec master..xp_cmdshell 'ipconfig'
          select @ipLine = ipLine
          from #temp
          where upper (ipLine) like '%IP ADDRESS%'
          if (isnull (@ipLine,'***') != '***')
          begin 
                set @pos = CharIndex (':',@ipLine,1);
                set @ip = rtrim(ltrim(substring (@ipLine , 
               @pos + 1 ,
                len (@ipLine) - @pos)))
           end 
drop table #temp
set nocount off
end 
go

declare @ip varchar(40)
exec sp_get_ip_address @ip out
print @ip

Fuente del script SQL.

12voto

chris.leonard Puntos 121

El servidor puede tener múltiples direcciones IP en las que está escuchando. Si tu conexión tiene el permiso del servidor VIEW SERVER STATE, puedes ejecutar esta consulta para obtener la dirección a la que te has conectado al servidor SQL:

SELECT dec.local_net_address
FROM sys.dm_exec_connections AS dec
WHERE dec.session_id = @@SPID;

Esta solución no requiere que recurras al sistema operativo a través de xp_cmdshell, lo cual es una técnica que debería deshabilitarse (o al menos estar estrictamente asegurada) en un servidor de producción. Puede que necesites conceder el permiso VIEW SERVER STATE al inicio de sesión correspondiente, pero es un riesgo de seguridad mucho menor que ejecutar xp_cmdshell.

La técnica mencionada por GilM para el nombre del servidor es la preferida:

SELECT SERVERPROPERTY(N'MachineName');

7voto

Michał Piaskowski Puntos 2688

Está en la variable @@SERVERNAME ;

SELECT @@SERVERNAME;

3voto

Pseudo Masochist Puntos 1579
select @@servername

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X