¿Existe alguna consulta en SQL Server 2005 que pueda utilizar para obtener la IP o el nombre del servidor?
sql
sql-server
Seibar
fuente
fuente
Respuestas:
El código aquí le dará la dirección IP;
Esto funcionará para una solicitud de cliente remoto a SQL 2008 y versiones posteriores.
Si tiene conexiones de memoria compartida permitidas, ejecutar arriba en el servidor mismo le dará
<local machine>
' 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 sobre las conexiones de memoria compartida), y la dirección que le daría a alguien si no puede usar el NetBios del servidor nombre o FQDN por alguna razón.
Aconsejo encarecidamente no usar esta respuesta . Habilitar el shell out es una muy mala idea en un servidor SQL de producción.
fuente
Puede obtener el [nombre de host] \ [nombre de instancia] mediante:
Para obtener solo el nombre de host cuando tiene el formato de nombre de host \ nombre de instancia:
Alternativamente, como señaló @GilM:
Puede obtener la dirección IP real usando esto:
Fuente del script SQL .
fuente
El servidor puede tener varias direcciones IP en las que está escuchando. Si su conexión tiene el permiso de servidor VIEW SERVER STATE otorgado, puede ejecutar esta consulta para obtener la dirección que se ha conectado a SQL Server:
Esta solución no requiere que acceda al sistema operativo a través de xp_cmdshell, que es una técnica que debe deshabilitarse (o al menos asegurarse estrictamente) en un servidor de producción. Es posible que requiera que otorgue VIEW SERVER STATE al inicio de sesión apropiado, pero ese 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:
fuente
La mayoría de las soluciones para obtener la dirección IP a través de t-sql se incluyen en estos dos campos:
Ejecutar
ipconfig.exe
a través dexp_cmdshell
y analizar la salidaConsultar DMV
sys.dm_exec_connections
No soy fanático de la opción # 1. Habilitar xp_cmdshell tiene inconvenientes de seguridad y, de todos modos, hay mucho análisis involucrado. Eso es engorroso. La opción # 2 es elegante. Y es una solución t-sql pura, que casi siempre prefiero. Aquí hay dos consultas de muestra para la opción # 2:
A veces, sin embargo, ninguna de las consultas anteriores funciona. La consulta n. ° 1 devuelve NULL si está conectado a través de la memoria compartida (inició sesión y ejecuta SSMS en el host SQL). La consulta n. ° 2 puede no devolver nada si no hay conexiones utilizando un protocolo de memoria no compartida. Este escenario es probable cuando se conecta a una instancia de SQL recién instalada. ¿La solución? Forzar una conexión sobre TCP / IP. Para hacer esto, cree una nueva conexión en SSMS y use el prefijo "tcp:" con el nombre del servidor. Luego, vuelva a ejecutar cualquiera de las consultas y obtendrá la dirección IP.
fuente
Está en la variable @@ SERVERNAME ;
fuente
puede usar la consulta de línea de comando y ejecutar en mssql:
fuente
xp_cmdshell
está habilitado en la configuración de seguridad del servidor--Prueba este script, funciona según mis necesidades. Vuelva a formatear para leerlo.
fuente
fuente
Una forma más sencilla de obtener el nombre de la máquina sin \ InstanceName es:
fuente
Sé que esta es una publicación antigua, pero tal vez esta solución pueda ser útil cuando desee recuperar la dirección IP y el puerto TCP de una conexión de memoria compartida (por ejemplo, de un script ejecutado en SSMS localmente en el servidor). La clave es abrir una conexión secundaria a su SQL Server usando OPENROWSET, en la que especifica 'tcp:' en su cadena de conexión. El resto del código es simplemente construir SQL dinámico para evitar la limitación de OPENROWSET de no poder tomar variables como parámetros.
fuente
Ad Hoc Distributed Queries
estar activado.