본문 바로가기
Database

[ORACLE] SYS_CONTEXT() 함수로 사용자, 세션, IP 정보 확인하는 방법

by Engineer J 2025. 6. 7.

오라클 SYS_CONTEXT() 함수로 사용자, 세션, IP 정보 확인하는 방법
[Oracle] SYS_CONTEXT

 

1. SYS_CONTEXT 함수란?

SYS_CONTEXT 함수는 Oracle에서 사용자의 세션, 네트워크, 인증 등의 환경 정보를 동적으로 조회할 수 있도록 해주는 내장 함수입니다. 주로 보안 감사, 사용자 추적, 커스터마이징 된 트리거나 정책 기반 제어 로직을 구현할 때 활용됩니다.

기본 문법:

SYS_CONTEXT('namespace', 'parameter' [, length])
  • namespace: 컨텍스트 영역 이름 (주로 'USERENV')
  • parameter: 조회할 항목명 (예: 'SESSION_USER')
  • length: 반환 문자열의 최대 길이 (생략 가능)

2. USERENV 콘텍스트의 주요 파라미터

가장 널리 사용되는 namespace는 'USERENV'입니다. 다음은 주요 파라미터 목록입니다.

파라미터 설명
SESSION_USER 세션을 시작한 사용자
OS_USER 운영체제 사용자
HOST 접속한 클라이언트 호스트 이름
IP_ADDRESS 클라이언트 IP 주소
AUTHENTICATED_IDENTITY 실제 인증된 사용자
LANGUAGE 세션의 언어 및 국가 정보
TERMINAL 사용자의 터미널 또는 클라이언트 식별자

3. 기본 사용 예제

SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') AS session_user,
       SYS_CONTEXT('USERENV', 'OS_USER') AS os_user,
       SYS_CONTEXT('USERENV', 'IP_ADDRESS') AS ip
FROM DUAL;

위 쿼리는 현재 접속한 유저의 데이터베이스 사용자명, OS 계정, IP 주소를 반환합니다.

4. SYS_CONTEXT 함수 실무 활용 예시

4-1. 트리거에서 데이터 변경자 추적

CREATE OR REPLACE TRIGGER trg_audit_product
BEFORE UPDATE ON PRODUCT
FOR EACH ROW
BEGIN
  INSERT INTO AUDIT_LOG(product_id, updated_by, updated_ip, updated_at)
  VALUES(:OLD.PRODUCT_ID,
         SYS_CONTEXT('USERENV', 'SESSION_USER'),
         SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
         SYSDATE);
END;

4-2. 보안 정책 제어 (예: IP 차단)

BEGIN
  IF SYS_CONTEXT('USERENV', 'IP_ADDRESS') = '192.168.0.100' THEN
    RAISE_APPLICATION_ERROR(-20001, '허용되지 않은 IP입니다.');
  END IF;
END;

4-3. 보고서나 로그에 사용자 환경정보 삽입

SELECT ORDER_ID, AMOUNT,
       SYS_CONTEXT('USERENV', 'SESSION_USER') AS 조회자,
       SYSDATE AS 조회일자
FROM ORDERS;

5. SYS_CONTEXT vs CURRENT_USER vs USER 비교

항목 설명
SYS_CONTEXT('USERENV', 'SESSION_USER') 세션 시작 시의 사용자
SYS_CONTEXT('USERENV', 'CURRENT_USER') 현재 실행 중인 컨텍스트의 사용자 (권한 계승 포함)
USER SQL을 실행한 사용자 (가장 간단한 표현)

6. 주의사항 및 팁

  • SYS_CONTEXT는 SELECT 절, WHERE 절, PL/SQL 블록 어디서든 사용 가능
  • 길이 제한이 필요한 경우 세 번째 인자로 문자열 길이 설정 가능
  • USERENV 외에도 'CLIENT_IDENTIFIER', 'AUTHENTICATION_TYPE' 등 다양하게 활용
  • 실제 적용 전 테스트 환경에서 값 확인 필수 (접속 경로에 따라 다르게 나올 수 있음)

7. 결론

Oracle의 SYS_CONTEXT 함수는 세션, 사용자, 환경 정보를 조회하는 데 매우 유용하며, 보안 감사, 트리거 로깅, 사용자 맞춤 로직 구현에 필수적인 함수입니다. 특히 ‘USERENV’ 네임스페이스를 통해 다양한 시스템 레벨 정보를 실시간으로 확인하고 조건 분기를 설정할 수 있어 실무 적용성이 뛰어납니다. 개발자는 다양한 파라미터를 숙지하고, 적절한 시점에 활용하는 전략을 익혀야 합니다.

출처

  • Oracle 공식 문서: https://docs.oracle.com/en/
  • Oracle SQL Language Reference: SYS_CONTEXT Function
  • 실무 경험 기반 예제 및 테스트 환경 검증