Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 CLIENT IP ADDRESS 얻는 방법
CLIENT IP ADDRESS 얻는 방법
===========================


1. client쪽에서 ip를 구하는 방법은 8i에서부터 다음 sql문장으로 가능합니다.

SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') "My IP Address" from dual;


2. client application 실행 시에 server 쪽에 정보를 넣는 방법도 있습니다

db trigger 이용 방법

sqlplus sys/change_on_install로 접속한 후 다음을 실행시킨다.


drop table sqlclient;
create table sqlclient ( ipno varchar2(20), sid number, name varchar2(64));


create or replace procedure ip_ins is
curInfo varchar2(80);
v_sid number;
v_sno number;
v_ipno varchar2(20);
v_name varchar2(64);
sessionid varchar2(20);
begin
sessionid := dbms_session.unique_session_id();
dbms_application_info.read_client_info(curInfo);
dbms_application_info.set_client_info(sessionid);
select sid, machine
into v_sid, v_name
from v$session
where client_info = sessionid;
dbms_application_info.set_client_info(curInfo);
--
v_ipno := sys_context('USERENV','IP_ADDRESS');
if v_ipno is not null then
insert into sqlclient
values (v_ipno, v_sid, v_name );
commit;
end if;
exception
when dup_val_on_index then
update sqlclient
set sid = v_sid
, name = v_name
where ipno = v_ipno;
commit;
-- when others then
-- null;
end;
/

create or replace trigger db_logon
after logon on database
begin
sys.ip_ins;
end;
/

client에서 접속한 후
sys user에서 select * from sqlclient;를 해보면 접속한 user의 ip address를
볼 수 있습니다.


또 DBMS_APPLICATION_INFO.SET_CLIENT_INFO를 사용해서 v$session에 정보를 넣는 방법도
있습니다.

Program에서 Service수행시작시 아래와 같이 package를 수행시키고,
exec DBMS_APPLICATION_INFO.SET_CLIENT_INFO('ServiceName');
Service수행이 끝날 때 아래와 같이 package를 수행시킵니다.
exec DBMS_APPLICATION_INFO.SET_CLIENT_INFO('');

이렇게 하면, v$session의 client_info column에 해당 정보가 나오게 됩니다.


3. os 상에선 netstat -a | grep 1521나 다른 명령을 이용해서 알 수 있습니다.



4. AUDIT를 이용하는 방법이 있습니다.

(1). AUDIT 기능 설정 (init.ora 화일에 다음과 같이 추가합니다)

AUDIT_TRAIL=DB

(2). db를 restart한다.

(3). AUDIT 설정 방법

$ sqlplus sys/
SQL> col COMMENT$TEXT for a100
SQL> AUDIT SESSION BY SESSION;

SQL> select COMMENT$TEXT from aud$;

COMMENT$TEXT

--------------------------------------------------------------------------------

Authenticated by: DATABASE <--- Host 접속의 경우
Authenticated by: DATABASE; Client address:
(ADDRESS=(PROTOCOL=tcp)(HOST=152.69.
18.228)(PORT=1504)) <--- Client 접속의 경우

(4). AUDIT 해제 방법

$ sqlplus sys/
SQL> NOAUDIT SESSION;
Comment
등록된 코멘트가 없습니다.