Existe uma consulta no SQL Server 2005 que posso usar para obter o IP ou nome do servidor?
sql
sql-server
Seibar
fonte
fonte
Respostas:
O código aqui fornecerá o endereço IP;
Isso funcionará para uma solicitação de cliente remoto para SQL 2008 e mais recente.
Se você tiver conexões de memória compartilhada permitidas, a execução acima no próprio servidor lhe dará
<local machine>
' será mostrado em 'client_net_address'.'client_net_address' é o endereço do computador de onde a solicitação se originou, enquanto 'local_net_address' seria o servidor SQL (portanto, NULL em conexões de memória compartilhada) e o endereço que você daria a alguém se eles não pudessem usar o NetBios do servidor nome ou FQDN por algum motivo.
Aconselho fortemente contra o uso desta resposta . Habilitar o shell out é uma ideia muito ruim em um SQL Server de produção.
fonte
Você pode obter o [nome do host] \ [nome da instância] por:
Para obter apenas o nome do host quando você tiver o formato nome do host \ nome da instância:
Alternativamente, como @GilM apontou:
Você pode obter o endereço IP real usando:
Fonte do script SQL .
fonte
O servidor pode ter vários endereços IP em que está escutando. Se sua conexão tiver a permissão de servidor VIEW SERVER STATE concedida a ela, você pode executar esta consulta para obter o endereço que você conectou ao SQL Server:
Esta solução não requer que você forneça ao SO via xp_cmdshell, que é uma técnica que deve ser desabilitada (ou pelo menos estritamente protegida) em um servidor de produção. Pode exigir que você conceda VIEW SERVER STATE ao login apropriado, mas esse é um risco de segurança muito menor do que executar xp_cmdshell.
A técnica mencionada por GilM para o nome do servidor é a preferida:
fonte
A maioria das soluções para obter o endereço IP via t-sql se enquadra nestes dois campos:
Execute
ipconfig.exe
viaxp_cmdshell
e analisar a saídaConsultar DMV
sys.dm_exec_connections
Não sou fã da opção nº 1. Habilitar xp_cmdshell tem desvantagens de segurança e, de qualquer maneira, há muita análise envolvida. Isso é complicado. A opção 2 é elegante. E é uma solução t-sql pura, que quase sempre prefiro. Aqui estão dois exemplos de consultas para a opção 2:
Às vezes, nenhuma das consultas acima funciona. A consulta # 1 retorna NULL se você estiver conectado pela memória compartilhada (conectado e executando o SSMS no host SQL). A consulta # 2 pode não retornar nada se não houver conexões usando um protocolo de memória não compartilhada. Este cenário é provável quando conectado a uma instância SQL recém-instalada. A solução? Força uma conexão por TCP / IP. Para fazer isso, crie uma nova conexão no SSMS e use o prefixo "tcp:" com o nome do servidor. Em seguida, execute novamente qualquer consulta e você obterá o endereço IP.
fonte
Está na variável @@ SERVERNAME ;
fonte
você pode usar a consulta de linha de comando e executar em mssql:
fonte
xp_cmdshell
estiver habilitado na configuração de segurança do servidor- Experimente este script que atende às minhas necessidades. Reformate para ler.
fonte
fonte
Uma maneira mais simples de obter o nome da máquina sem o \ InstanceName é:
fonte
Eu sei que este é um post antigo, mas talvez esta solução possa ser útil quando você deseja recuperar o endereço IP e a porta TCP de uma conexão de memória compartilhada (por exemplo, de um script executado em SSMS localmente no servidor). A chave é abrir uma conexão secundária com seu SQL Server usando OPENROWSET, no qual você especifica 'tcp:' em sua string de conexão. O resto do código é meramente construir SQL dinâmico para contornar a limitação do OPENROWSET de não ser capaz de tomar variáveis como seus parâmetros.
fonte
Ad Hoc Distributed Queries
ser ativado.