[SQL] SQL - 쿼리 서버의 IP 주소를 얻을 수 있습니다
SQLSQL - 쿼리 서버의 IP 주소를 얻을 수 있습니다
는 SQL Server 2005의 쿼리 나 서버의 IP 또는 이름을 얻기 위해 사용할 수 있습니까?
해결법
-
==============================
1.
SELECT 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
여기 코드는 당신에게 IP 주소를 줄 것이다;
이것은 SQL 2008 및 최신에 원격 클라이언트 요청에 대해 작동합니다.
당신이 공유 메모리 연결을 허용 할 경우, 그 자체가 당신에게 줄 것이다 서버에서 위의 실행
'client_net_address는'local_net_address이 '(공유 메모리 연결을 통해 따라서 NULL) SQL 서버 및 주소가 될 것입니다 반면, 그들은 서버의 NetBIOS를 사용할 수없는 경우 당신이 누군가에게 줄 것이다로부터 요청이 유래 컴퓨터의 주소입니다 이름 또는 어떤 이유로 FQDN.
강력이 답변을 사용에 대한 조언한다. 쉘 아웃을 사용하면 생산 SQL 서버에 아주 나쁜 생각이다.
-
==============================
2.당신은 [호스트 이름] \ [인스턴스 이름]에 의해 얻을 수 있습니다 :
당신은 [호스트 이름] \ [인스턴스 이름]에 의해 얻을 수 있습니다 :
SELECT @@SERVERNAME;
당신이 호스트 이름 \ 인스턴스 이름 형식이있는 경우에만 호스트 이름을 얻으려면 :
SELECT LEFT(ltrim(rtrim(@@ServerName)), Charindex('\', ltrim(rtrim(@@ServerName))) -1)
@GilM 지적 다른 방법으로 :
SELECT SERVERPROPERTY('MachineName')
이 작업을 사용하여 실제 IP 주소를 얻을 수 있습니다 :
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
SQL 스크립트의 소스.
-
==============================
3.서버는 수신하는지 여러 개의 IP 주소가있을 수 있습니다. 연결이 부여 된 VIEW 서버에 주 서버 권한이있는 경우, 당신은 당신이 SQL 서버에 연결 한 주소를 얻기 위해이 쿼리를 실행할 수 있습니다 :
서버는 수신하는지 여러 개의 IP 주소가있을 수 있습니다. 연결이 부여 된 VIEW 서버에 주 서버 권한이있는 경우, 당신은 당신이 SQL 서버에 연결 한 주소를 얻기 위해이 쿼리를 실행할 수 있습니다 :
SELECT dec.local_net_address FROM sys.dm_exec_connections AS dec WHERE dec.session_id = @@SPID;
이 솔루션은 프로덕션 서버에서 (또는 적어도 엄격하게 확보) 비활성화해야하는 기술이다, xp_cmdshell을 통해 OS에 밖으로 껍질 필요가 없습니다. 그것은 적절한 로그인에 대한 VIEW SERVER STATE 권한을 부여해야 할 수도 있습니다,하지만 xp_cmdshell을 실행보다 훨씬 작은 보안 위험이다.
서버 이름 GilM 언급이 기술은 선호 하나입니다 :
SELECT SERVERPROPERTY(N'MachineName');
-
==============================
4.이 두 진영으로 T-SQL 가을을 통해 IP 주소를 가져 오는 대부분의 솔루션 :
이 두 진영으로 T-SQL 가을을 통해 IP 주소를 가져 오는 대부분의 솔루션 :
내가 옵션 # 1의 팬이 아니에요. xp_cmdshell을을 사용하면 보안 단점이 있고, 어쨌든 포함 된 구문 분석이 많이있다. 그것은 성가신입니다. 옵션 # 2 우아한. 그리고 나는 거의 항상 선호하는 순수 T-SQL 솔루션입니다. 여기에 옵션 # 2에 대한 두 개의 샘플 쿼리는 다음과 같습니다
SELECT c.local_net_address FROM sys.dm_exec_connections AS c WHERE c.session_id = @@SPID; SELECT TOP(1) c.local_net_address FROM sys.dm_exec_connections AS c WHERE c.local_net_address IS NOT NULL;
때때로,도 위의 쿼리의 작품,하지만. 당신이 공유 메모리를 통해 연결하는 경우 쿼리 # 1를 반환 NULL (투입하고, SQL 호스트에서 SSMS를 실행 기록). 비 공유 메모리 프로토콜을 사용하여 아무런 연결이없는 경우 쿼리 # 2는 아무 것도 반환하지 않을 수 있습니다. 새로 설치 한 SQL 인스턴스에 연결되어있을 때이 시나리오는 가능성이 높습니다. 해결책? TCP / IP를 통한 연결을 강제로. 이렇게하려면 SSMS에서 새 연결을 생성하고 "TCP :"사용하는 서버 이름으로 접두사. 그런 다음 두 쿼리를 다시 실행하면 IP 주소를 얻을 수 있습니다.
-
==============================
5.그것은 @@의 SERVERNAME 변수에의;
그것은 @@의 SERVERNAME 변수에의;
SELECT @@SERVERNAME;
-
==============================
6.내 요구에 작동이 스크립트를 --Try. 재 포맷은 그것을 읽을 수 있습니다.
내 요구에 작동이 스크립트를 --Try. 재 포맷은 그것을 읽을 수 있습니다.
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBios') as 'Is_Current_Owner' ,SERVERPROPERTY('MachineName') as 'MachineName' ,case when @@ServiceName = Right (@@Servername,len(@@ServiceName)) then @@Servername else @@servername +' \ ' + @@Servicename end as '@@Servername \ Servicename', CONNECTIONPROPERTY('net_transport') AS net_transport, CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port, dec.local_tcp_port, CONNECTIONPROPERTY('local_net_address') AS local_net_address, dec.local_net_address as 'dec.local_net_address' FROM sys.dm_exec_connections AS dec WHERE dec.session_id = @@SPID;
-
==============================
7.당신은 명령 줄 쿼리를 사용하고 MSSQL에서 실행할 수 있습니다 :
당신은 명령 줄 쿼리를 사용하고 MSSQL에서 실행할 수 있습니다 :
exec xp_cmdshell 'ipconfig'
-
==============================
8.
select @@servername
-
==============================
9.의 \ 인스턴스 이름없이 컴퓨터 이름을 얻을 수있는 간단한 방법은 다음과 같습니다
의 \ 인스턴스 이름없이 컴퓨터 이름을 얻을 수있는 간단한 방법은 다음과 같습니다
SELECT SERVERPROPERTY('MachineName')
-
==============================
10.나는 이것이 이전 게시물입니다 알지만, 당신은 (서버에 로컬로 SSMS에서 예를 들어, 스크립트 실행에서) 공유 메모리 연결에서 IP 주소와 TCP 포트를 검색하고자 할 때 아마도이 솔루션은 유용 할 수 있습니다. 'TCP를'연결 문자열의 열쇠는 당신이 지정하는 OPENROWSET을 사용하여 SQL Server에 보조 연결을 열 수 있습니다. 코드의 나머지 부분은 단순히 매개 변수로 변수를 취할 수 없다는 OPENROWSET의 한계를 해결하기 위해 동적 SQL을 구축하고있다.
나는 이것이 이전 게시물입니다 알지만, 당신은 (서버에 로컬로 SSMS에서 예를 들어, 스크립트 실행에서) 공유 메모리 연결에서 IP 주소와 TCP 포트를 검색하고자 할 때 아마도이 솔루션은 유용 할 수 있습니다. 'TCP를'연결 문자열의 열쇠는 당신이 지정하는 OPENROWSET을 사용하여 SQL Server에 보조 연결을 열 수 있습니다. 코드의 나머지 부분은 단순히 매개 변수로 변수를 취할 수 없다는 OPENROWSET의 한계를 해결하기 위해 동적 SQL을 구축하고있다.
DECLARE @ip_address varchar(15) DECLARE @tcp_port int DECLARE @connectionstring nvarchar(max) DECLARE @parm_definition nvarchar(max) DECLARE @command nvarchar(max) SET @connectionstring = N'Server=tcp:' + @@SERVERNAME + ';Trusted_Connection=yes;' SET @parm_definition = N'@ip_address_OUT varchar(15) OUTPUT , @tcp_port_OUT int OUTPUT'; SET @command = N'SELECT @ip_address_OUT = a.local_net_address, @tcp_port_OUT = a.local_tcp_port FROM OPENROWSET(''SQLNCLI'' , ''' + @connectionstring + ''' , ''SELECT local_net_address , local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@spid '') as a' EXEC SP_executeSQL @command , @parm_definition , @ip_address_OUT = @ip_address OUTPUT , @tcp_port_OUT = @tcp_port OUTPUT; SELECT @ip_address, @tcp_port
from https://stackoverflow.com/questions/142142/sql-query-to-get-servers-ip-address by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버와 SELECT FOR UPDATE (0) | 2020.04.18 |
---|---|
[SQL] T-SQL : MAX에 열을 기반으로 선택 (기타 열) (0) | 2020.04.18 |
[SQL] 삽입, 업데이트 SQL Server에서 proc 디렉토리에 저장 (0) | 2020.04.18 |
[SQL] @@ IDENTITY, SCOPE_IDENTITY (), 출력 된 마지막 ID를 검색하는 다른 방법 (0) | 2020.04.18 |
[SQL] 집계 함수없이 GROUP BY (0) | 2020.04.18 |