반응형
접근제한 솔루션이 없는 경우
oracle db내 접속한 유저(DB,OS) 및 접속 시간, 접속한 IP, 접속한 방법(Tool) 테이블로 로그 남기기
1. 테이블 생성
-- db login 정보 이력 table 생성
CREATE TABLE SYSTEM.USER_LOGIN
(
LOGINOUT VARCHAR2(20),
DT VARCHAR2(50),
SID VARCHAR2(10),
DB_USER VARCHAR2(50),
OSUSER VARCHAR2(50),
HOST VARCHAR2(200),
INT_IP VARCHAR2(20),
APPINFO VARCHAR2(200)
)
TABLESPACE SYSTEM
STORAGE
(
INITIAL 64K
NEXT 1M
)
NOCOMPRESS;
(
LOGINOUT VARCHAR2(20),
DT VARCHAR2(50),
SID VARCHAR2(10),
DB_USER VARCHAR2(50),
OSUSER VARCHAR2(50),
HOST VARCHAR2(200),
INT_IP VARCHAR2(20),
APPINFO VARCHAR2(200)
)
TABLESPACE SYSTEM
STORAGE
(
INITIAL 64K
NEXT 1M
)
NOCOMPRESS;
2. 트리거 생성
-- db login 할때, table에 login user 정보 를 insert 할 trigger 작성
CREATE OR REPLACE trigger SYSTEM.logon_trigger after logon on database
begin
INSERT INTO SYSTEM.USER_LOGIN ( LOGINOUT , DT, SID, DB_USER, OSUSER, HOST, INT_IP, APPINFO )
SELECT 'LOGON',
to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'), --시간
sys_context('USERENV', 'SID'), -- 세션번호
sys_context('USERENV', 'SESSION_USER'), --DB접속유저
sys_context('USERENV', 'OS_USER'), --OS유저
sys_context('USERENV', 'HOST'), --접속장비
nvl(sys_context('userenv','IP_ADDRESS'),'192.168.1.149'), -- 접속IP null일경우 리스너 안통하고 로컬서버에서 접속
nvl(sys_context('USERENV', 'MODULE'), 'local system check')--DBMS_APP_INFO 모률이름 null일경우 oracle 자체 system 체크
FROM DUAL;
end;
※. 트리거 설명 로그인/로그아웃 내역 조회
텔넷으로 접속한 세션들은 ip 정보가 null 로 아무것도 보이지가 않는데,
sqlnet을 통해 들어온 클라이언트만 ip가 보이는건지 궁금합니다
listener를 통했냐 아니냐의 차이입니다.
telnet으로 들어간서버에서 접속시에도 sqlplus 로 접속시@TNS 를 사용하면 보일겁니다.
listener를 통했냐 아니냐의 차이입니다.
telnet으로 들어간서버에서 접속시에도 sqlplus 로 접속시@TNS 를 사용하면 보일겁니다.
listener 없이 로컬에서 접속한 경우의 아이피는 null로 표시됩니다.
리스너를 통해서 접속한것만 ip를 확인할 수 있습니다
리스너를 통해서 접속한것만 ip를 확인할 수 있습니다
3. DBMS에 로그인한 이력남는 테이블에 남는 정보
-> 리스너를 통하여 접속한 이력정보
※. 트리거 다른거
- db login 할때, table에 login user 정보 를 insert 할 trigger 작성
create or replace trigger logon_trigger after logon on database
begin
INSERT INTO USER_LOGINOUT ( LOGINOUT , DT, SID, DB_USER, OSUSER, HOST, IPINFO, APP_INFO )
SELECT 'LOGON',
to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'), --시간
sys_context('USERENV', 'SID'), -- 세션번호
sys_context('USERENV', 'SESSION_USER'), --DB접속유저
sys_context('USERENV', 'OS_USER'), --OS유저
sys_context('USERENV', 'HOST'), --접속장비
sys_context('userenv','IP_ADDRESS'), -- 접속IP
sys_context('USERENV', 'MODULE') --DBMS_APP_INFO 모률이름
FROM DUAL A;
end;
/
- db logout 할때, table에 login user 정보 를 insert 할 trigger 작성
create or replace trigger logout_trigger before logoff on database
begin
INSERT INTO USER_LOGINOUT ( LOGINOUT , DT, SID, DB_USER, OSUSER, HOST, IPINFO, APP_INFO )
SELECT 'LOGOFF',
to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'), --시간
sys_context('USERENV', 'SID'), -- 세션번호
sys_context('USERENV', 'SESSION_USER'), --DB접속유저
sys_context('USERENV', 'OS_USER'), --OS유저
sys_context('USERENV', 'HOST'), --접속장비
sys_context('userenv','IP_ADDRESS'), -- 접속IP
sys_context('USERENV', 'MODULE') --DBMS_APP_INFO 모률이름
FROM DUAL A;
SELECT 'LOGOFF',
to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'), --시간
sys_context('USERENV', 'SID'), -- 세션번호
sys_context('USERENV', 'SESSION_USER'), --DB접속유저
sys_context('USERENV', 'OS_USER'), --OS유저
sys_context('USERENV', 'HOST'), --접속장비
sys_context('userenv','IP_ADDRESS'), -- 접속IP
sys_context('USERENV', 'MODULE') --DBMS_APP_INFO 모률이름
FROM DUAL A;
end;
'DBMS > Oracle' 카테고리의 다른 글
rownumber이용한 테이블 조회(카운터) (0) | 2022.07.04 |
---|---|
sequence 관리 (0) | 2022.07.04 |
바이드 변수 값 알기 (0) | 2022.07.04 |
잘리는 쿼리 조회시 (0) | 2022.07.04 |
통계수집 관련 SCHEDULER_JOB disable (0) | 2022.07.04 |