
오라클 데이터베이스의 컨텍스트(Context)는 세션 기반의 동적 정보 저장 및 보안 정책 구현을 위해 사용되는 강력한 메커니즘입니다. 그중 ALL_CONTEXT 뷰는 현재 세션 또는 애플리케이션에서 정의된 모든 컨텍스트 정보를 확인할 수 있게 해주는 핵심 데이터 딕셔너리 뷰입니다. 본 글에서는 ALL_CONTEXT의 구조와 실무 활용법, 보안적 이점까지 심층적으로 다룹니다.
1. ORACLE CONTEXT란 무엇인가?
Oracle Context는 사용자의 세션 정보를 기반으로 동적인 보안 정책, 애플리케이션 사용자 구분, 감사 로깅 등을 구현할 수 있도록 설계된 논리적 영역입니다. 컨텍스트는 SYS_CONTEXT 함수로 조회할 수 있으며, DBMS_SESSION.SET_CONTEXT를 통해 값을 설정합니다.
2. ALL_CONTEXT 뷰 개요
ALL_CONTEXT는 현재 사용자 또는 세션이 접근할 수 있는 모든 네임스페이스의 컨텍스트 항목을 보여줍니다. 오라클이 제공하는 시스템 컨텍스트뿐만 아니라, 애플리케이션이 직접 정의한 사용자 컨텍스트도 포함됩니다.
3. 주요 컬럼 설명
| 컬럼명 | 설명 |
|---|---|
| NAMESPACE | 컨텍스트 이름(네임스페이스) |
| ATTRIBUTE | 속성 이름 (Key) |
| VALUE | 해당 속성의 현재 값 |
| SESSION_ID | 해당 컨텍스트가 설정된 세션의 ID |
4. 실무 활용 예제
다음은 ALL_CONTEXT를 통해 현재 세션의 모든 컨텍스트 정보를 조회하는 SQL입니다.
SELECT * FROM ALL_CONTEXT WHERE NAMESPACE = 'USERENV';
특정 네임스페이스만 필터링하여 사용할 수 있으며, 애플리케이션에서 설정한 컨텍스트도 확인 가능합니다.
SELECT * FROM ALL_CONTEXT WHERE NAMESPACE = 'MY_APP_CTX';
5. SYS_CONTEXT와의 관계
SYS_CONTEXT 함수는 특정 컨텍스트 값을 가져오기 위해 사용됩니다. 예를 들어, 다음은 현재 사용자의 IP 주소를 조회하는 예시입니다.
SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS') FROM DUAL;
ALL_CONTEXT는 이러한 컨텍스트들의 전체 목록과 값을 한 번에 확인할 수 있도록 하는 뷰입니다.
6. 사용자 정의 컨텍스트 만들기
- 컨텍스트 생성
CREATE CONTEXT my_app_ctx USING my_app_pkg;
- 컨텍스트 설정 (PL/SQL 패키지 예시)
CREATE OR REPLACE PACKAGE my_app_pkg AS
PROCEDURE set_user_context;
END my_app_pkg;
/
CREATE OR REPLACE PACKAGE BODY my_app_pkg AS
PROCEDURE set_user_context IS
BEGIN
DBMS_SESSION.SET_CONTEXT('MY_APP_CTX', 'USER_ROLE', 'ADMIN');
END;
END my_app_pkg;
- 설정 후 확인
SELECT SYS_CONTEXT('MY_APP_CTX', 'USER_ROLE') FROM DUAL;
7. 시스템 vs 사용자 정의 컨텍스트 비교
| 항목 | 시스템 컨텍스트 | 사용자 정의 컨텍스트 |
|---|---|---|
| 예시 NAMESPACE | USERENV, CLIENT_IDENTIFIER | MY_APP_CTX 등 개발자 정의 |
| 설정 방법 | 자동 설정 (시스템 내부) | DBMS_SESSION 또는 인증 프로시저 필요 |
| 사용 목적 | 세션/환경 정보 확인 | 애플리케이션 로직 분기, 보안 정책 적용 |
| 보안 활용도 | 중간 | 높음 (RLS와 연계 가능) |
8. 보안 제어와의 연계
- Row-Level Security (RLS): 컨텍스트 값에 따라 행 단위 보안 필터링 구현 가능
- Fine-Grained Auditing (FGA): 특정 컨텍스트 조건 하에서만 감사 로그 기록
- 접근 제어 로직 분기: 사용자의 역할 또는 위치에 따라 동적 SQL 분기 처리 가능
9. 실무 팁 및 주의사항
- 컨텍스트는 세션 종료 시 소멸되므로 지속성을 위해서는 어플리케이션에서 재설정이 필요합니다.
- 컨텍스트 충돌 방지를 위해 네임스페이스는 명확하게 구분하여 정의하세요.
- 컨텍스트 기반 로직은 반드시 성능을 고려하여 적절히 사용해야 하며, 과도한 설정은 세션 부하를 야기할 수 있습니다.
10. 결론
ALL_CONTEXT는 오라클에서 보안, 감사, 애플리케이션 로직 제어를 보다 정교하게 구현하는 데 필수적인 뷰입니다. 단일 세션에서 사용되는 모든 컨텍스트 정보를 추적하여, 문제 발생 시 원인을 빠르게 분석하고, 필요한 경우 동적으로 접근 제어를 조정할 수 있는 유연성을 제공합니다. 실무에서는 컨텍스트를 통해 진보된 보안 정책과 로직 제어를 구현할 수 있으므로, 해당 기능의 이해와 적절한 사용이 중요합니다.
11. 참고 자료
- Oracle Database 21c Documentation – ALL_CONTEXT
- Oracle Database Security Guide
- Oracle PL/SQL Packages and Types Reference
- 국내 대기업 금융 시스템 오라클 운영 사례 (2018~2024)
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ALL_DEF_AUDIT_OPTS 완전 분석 : 감사 정책의 핵심 설정 뷰 (0) | 2025.06.20 |
|---|---|
| [ORACLE] ALL_DB_LINKS 뷰 완전 분석 : DB 링크 관리와 보안의 핵심 (0) | 2025.06.20 |
| [ORACLE] ALL_COL_PRIVS_RECD 완전 가이드 : 내가 받은 컬럼 권한 한눈에 파악하기 (0) | 2025.06.20 |
| [ORACLE] ALL_COL_PRIVS_MADE 뷰 완전 분석 : 직접 부여한 컬럼 권한 추적 가이드 (0) | 2025.06.20 |
| [ORACLE] ALL_COL_PRIVS 뷰 완벽 가이드 : 실무에 바로 적용하는 보안 권한 조회법 (0) | 2025.06.20 |