정말 오랜만에 글을 쓴다. ㅜ_ㅜ 크흑크흑 그동안 정말 온갖 우여곡절이 있었고....
어쨌든 근래에 조금 여유가 생기기 시작해서 어젠가 네이뇬에 들어가서 지식인에 재미난 질문이 없나 뒤적거리고 있었다..
그러던중
MS_SQL IP 알아내는 함수는 없나요
라는 질문을 보고 적었던 답변을 혹시나 찾는 사람이 있을까 싶어 옮겨 본다.
=======================================================================
일단 방법은 있습니다.
SQL Server 2005 를 쓴다면 좀 쉽게 할 수 있지만, 2000 이라면 쉘커맨드를 사용해야 합니다.
거의 모든 데이터베이스에는 데이터베이스 자체에서 사용하는 시스템 데이터베이스가 있습니다. SQL Server 의 경우 master 가 되겠지요. 여기를 보시면 테이블은 몇개 안되는데 상당히 많은 뷰가 존재합니다. 이 시스템 뷰에는 상당히 많은 유용한 정보들이 있는데요. 그중에 접속된 클라이언트 정보에 관련된 뷰도 존재합니다. sys.dm_exec_connections 라는 뷰인데요 (2005기준). 한번 셀렉트 해보시면 아시겠지만 접속된 각 세션에 대해서 자세한 정보가 들어 있습니다. 2005 에서는 여기에 client_net_address 라는 컬럼이 있는데 이정보를 사용하시면 됩니다. 간단하게 예를 들어 보죠.
select client_net_address from sys.dm_exec_connections where session_id = @@spid;
@@spid 는 아시다 시피 현재 쿼리를 실행하는 주체인 클라이언트의 세션아이디 입니다. 그 세션아이디를 이용해서 시스템뷰에서 해당 커넥션을 골라내는 거지요. 그리고 client_net_address 를 얻어내면 땡입니다.
그러면 2000 에서는 어떻게 하느냐? 사실 2005 의 sys.dm_exec_connections 라는 뷰는 2000 에 있던 sysprocesses 라는 테이블을 3개의 관리용 뷰로 나누면서 생겨난 것입니다. 따라서 2000 에서는 sysprocesses 라는 테이블을 사용하면 되지요. 이 테이블을 셀렉트 해보시면 net_address 라는 컬럼이 있습니다. 그런데 여기에는 MAC 주소가 들어 있지요. 그래서 IP 로 변환을 해야되는데. 이게 좀 번거롭습니다. MAC 주소를 통해 IP 를 얻는 방법은 간단하지 않은데다 보안상 위험한 부분도 있습니다.
arp 라는 명령행 유틸을 이용해야 하는데요. 명령행에서 유틸을 실행하기위해서는 xp_cmdshell 이라는 시스템 프로시저를 이용해야 합니다. 2000에서는 기본으로 활성화 되어있지만 2005 에서는 보안상의 이유로 비활성화 되어있지요. 하기사... 이 방법을 쓰게 되시면 이미 2000 이라는 전제가 있으니...
xp_cmdshell 'arp -a'
라는 명령을 수행한 결과를 한번 더 처리를 해야 합니다. 위의 명령의 결과는 아래와 같은 형태거든요.
Interface: 192.168.123.2 --- 0x10003Internet Address Physical Address Type192.168.123.254 00-0a-b8-b8-39-a2 dynamic.... .... 여러개 나옴.
위의 결과에서 아까 얻어낸 MAC 주소와 일치하는 놈을 찾아서 IP 를 얻어내야 합니다. 흐흐흐 정말 번거롭군요. 하지만 위의 MAC-IP 목록도 캐쉬에서 읽어오는 것이기 때문에 본인이 얻어낸 MAC 이 없을 확률도 있습니다. 그러면 정말 곤란해 지는 거지요. ㅋㅋ
=======================================================================
덧글|신고