/* 참고 SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS')||'/'||SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL ;
접속한 유저의 ID와 IP가져오는 방법
*/
1) 유저별 IP 관리 테이블 생성
CREATE TABLE USER_INFO (
USER_ID VARCHAR(30),
USER_IP VARCHAR(15) );
2) 속도를 위해 인덱스 생성/초기 건이 작아 FULL스캔이 더 효과적이라 인덱스 불필요하지만 향후 많아질 경우를 대비
CREATE INDEX IDX_USER_INFO
ON USER_INFO (USER_ID)
3) 셈플 데이터 입력
INSERT INTO USER_INFO VALUES ('SYSTEM','10.160.29.9')
4) 트리거 생성 - 획득한 IP와 접속한 유저의 IP비교 후 다른경우 에러메시지 출력
CREATE OR REPLACE TRIGGER ACCESS_CONTROL_TRIGGER
BEFORE LOGON ON DATABASE
DECLARE
ALLOWED_IP VARCHAR2(15) ; -- 변수선언
BEGIN
SELECT USER_IP INTO ALLOWED_IP -- 접속한 USER의 지정된 IP추출
FROM USER_INFO WHERE USER_ID =SYS_CONTEXT('USERENV', 'SESSION_USER');
-- 획득한 IP와 접속한 유저의 IP비교 후 다른경우 에러메시지 출력
IF (SYS_CONTEXT('USERENV', 'IP_ADDRESS') <> ALLOWED_IP) THEN
RAISE_APPLICATION_ERROR(-20001, 'ACCESS NOT ALLOWED FROM THIS IP ADDRESS.');
END IF;
END;
/