복붙노트

[SQL] 어떻게 SQL Server 2008을 자체에서 클라이언트 IP 주소를 얻으려면?

SQL

어떻게 SQL Server 2008을 자체에서 클라이언트 IP 주소를 얻으려면?

나는 삽입 / 업데이트 트리거 / 삭제가 있습니다. 즉 벌금을 노력하고 있습니다. 또한, 나는 변경 한 위치에서 클라이언트의 IP 주소가 필요합니다. 나는 T-SQL에서 필요로하는, 수단, 모든 웹 형태로하지만, SQL / T-SQL 내 트리거는 트리거됩니다 않으면 서있다.

또한 나는 갈-추파 및 ipconfig를 함께 실행될 때 우리는 IP 주소를 얻을 수 있습니다 마스터라는 이름의 데이터베이스 xp_cmdshell을 절차가 저장되어 있음을 얻었다. 난 당신이 데이터베이스에 대한 관리 액세스 권한이있는 경우에만 동작합니다 생각합니다. 나는 그런 특권을하지 않아도 내 호스팅은 호스팅 공유됩니다. 다른 방법 밖으로 있는가?

도와주세요

미리 감사드립니다

참고하십시오 : 내 SQL 서버 2008 데이터베이스에 대한 관리 권한이 없습니다. 나는 인증 된 사용자로 솔루션이 필요합니다.

또 다른 업데이트 :

나는 나의 시나리오가 작동 할 쿼리를 솔루션을 가지고있다

SELECT hostname, net_library, net_address
FROM sys.sysprocesses 
WHERE spid = @@SPID

필요하지만, 단 하나의 문제는 NET_ADDRESS가 IP 형식이 아닌 것을,이 같이 실행합니다. 아래 나의 결과는 다음과 같습니다

hostname    net_library     net_address
IPC03       TCP/IP          AE8F925461DE  

내가 알고 열망 :

겸손한 부탁:

/ 응답 주석 / downvoting하기 전에, 당신이 철저하게, 첫째, 질문을 통해 이동을 요청할 것입니다. 나는 / 어떤 사람이 댓글을 달았 발견 제대로 질문을 거치지 않고을 downvoted. 어떤 문제가, 모두가 실수를하지 않습니다. 하지만 때마다 메이크업 실수. :)

해결법

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

    1.나는 당신을 위해 일 수있는 무언가를 발견

    나는 당신을 위해 일 수있는 무언가를 발견

    CREATE FUNCTION [dbo].[GetCurrentIP] ()
    RETURNS varchar(255)
    AS
    BEGIN
        DECLARE @IP_Address varchar(255);
    
        SELECT @IP_Address = client_net_address
        FROM sys.dm_exec_connections
        WHERE Session_id = @@SPID;
    
        Return @IP_Address;
    END
    

    SQL 서버에서 클라이언트 IP 주소의 취득 방법

    또한 가져 오기 클라이언트 IP 주소에 대한이 문서를 보라

  2. ==============================

    2.이 솔루션을 시도 할 수 있습니다. 심지어 공유 호스팅에서 작동합니다 :

    이 솔루션을 시도 할 수 있습니다. 심지어 공유 호스팅에서 작동합니다 :

    select CONNECTIONPROPERTY('client_net_address') AS client_net_address 
    
  3. ==============================

    3.그것은 코드의 단지 한 줄 필요

    그것은 코드의 단지 한 줄 필요

     SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
    
  4. ==============================

    4.궁극적으로이 개 시스템 테이블을 조인 :

    궁극적으로이 개 시스템 테이블을 조인 :

    SELECT  hostname,
            net_library,
            net_address,
            client_net_address
    FROM    sys.sysprocesses AS S
    INNER JOIN    sys.dm_exec_connections AS decc ON S.spid = decc.session_id
    WHERE   spid = @@SPID
    

    산출:

    hostname | net_library | net_address | client_net_address    
    PIERRE   | TCP/IP      | 0090F5E5DEFF| 10.38.168.5
    
  5. ==============================

    5.제가 정확한 숫자 IP 주소를 가져올 수 없습니다, 대신 나는 때문에 위의 문장의 제한 NULL 값을 얻었다. 한계는 TCP / IP를 통해 연결되어있는 경우에만 IP 주소를 얻을 수 있다는 것입니다. 로컬이고 공유 메모리를 사용하는 경우, 그 속성은 존재하지 않습니다. 당신은 서버 구성 관리자를 통해 공유 메모리 (또는 TCP / IP를 제외한 모든 프로토콜)를 해제하면 당신은 항상 연결을위한 IP 주소를 얻을 것이다.

    제가 정확한 숫자 IP 주소를 가져올 수 없습니다, 대신 나는 때문에 위의 문장의 제한 NULL 값을 얻었다. 한계는 TCP / IP를 통해 연결되어있는 경우에만 IP 주소를 얻을 수 있다는 것입니다. 로컬이고 공유 메모리를 사용하는 경우, 그 속성은 존재하지 않습니다. 당신은 서버 구성 관리자를 통해 공유 메모리 (또는 TCP / IP를 제외한 모든 프로토콜)를 해제하면 당신은 항상 연결을위한 IP 주소를 얻을 것이다.

    당신은 최고의 붙어 있습니다

    SELECT SERVERPROPERTY(N'MachineName');
    

    ... 숫자로 된 IP 주소 대신 역할을 할 수있다.

  6. ==============================

    6.이 시도

    이 시도

    DECLARE @IP_Address varchar(255);
    SELECT @IP_Address = client_net_address
    FROM sys.dm_exec_connections
    WHERE Session_id = @@SPID;
    
    select @IP_Address;
    
  7. from https://stackoverflow.com/questions/9941074/how-to-get-the-client-ip-address-from-sql-server-2008-itself by cc-by-sa and MIT license