복붙노트

[SQL] SQL - 쿼리 서버의 IP 주소를 얻을 수 있습니다

SQL

SQL - 쿼리 서버의 IP 주소를 얻을 수 있습니다

는 SQL Server 2005의 쿼리 나 서버의 IP 또는 이름을 얻기 위해 사용할 수 있습니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.그것은 @@의 SERVERNAME 변수에의;

    그것은 @@의 SERVERNAME 변수에의;

    SELECT @@SERVERNAME;
    
  6. ==============================

    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. ==============================

    7.당신은 명령 줄 쿼리를 사용하고 MSSQL에서 실행할 수 있습니다 :

    당신은 명령 줄 쿼리를 사용하고 MSSQL에서 실행할 수 있습니다 :

    exec xp_cmdshell 'ipconfig'
    
  8. ==============================

    8.

    select @@servername
    
  9. ==============================

    9.의 \ 인스턴스 이름없이 컴퓨터 이름을 얻을 수있는 간단한 방법은 다음과 같습니다

    의 \ 인스턴스 이름없이 컴퓨터 이름을 얻을 수있는 간단한 방법은 다음과 같습니다

    SELECT SERVERPROPERTY('MachineName')
    
  10. ==============================

    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
    
  11. from https://stackoverflow.com/questions/142142/sql-query-to-get-servers-ip-address by cc-by-sa and MIT license