Oracle 데이터베이스에서는 외부 파일과의 입출력 작업이 필요한 경우 디렉터리 객체(Directory Object)를 사용합니다. 이러한 디렉터리 객체를 관리하고 확인할 수 있는 시스템 뷰가 바로 ALL_DIRECTORIES
입니다. 본 글에서는 Oracle 환경에서 ALL_DIRECTORIES 뷰의 구조, 역할, 보안 관리 및 실무 활용법에 대해 자세히 설명합니다.
1. ALL_DIRECTORIES란?
ALL_DIRECTORIES는 Oracle 데이터베이스에서 현재 사용자가 접근 권한을 가진 디렉터리 객체 목록을 보여주는 뷰입니다. 주로 UTL_FILE
, DBMS_LOB
, external table
등의 패키지 또는 기능과 연계하여 사용되며, 서버 내 파일 경로를 참조할 수 있도록 보안적으로 허용된 경로만을 다룹니다.
디렉터리 객체의 필요성
- 서버 파일 시스템에 안전하게 접근하기 위해 사용
- 파일 입출력(예: 로그, CSV 내보내기)을 위한 경로 지정
- 외부 테이블 사용 시 파일 위치 등록
- PL/SQL 내 UTL_FILE 작업을 위한 파일 경로 명시
2. 주요 컬럼 설명
컬럼명 | 설명 |
---|---|
DIRECTORY_NAME | 디렉터리 객체의 이름 (데이터베이스 내 참조 명) |
DIRECTORY_PATH | 서버에서의 실제 파일 시스템 경로 |
3. 실무 적용 예시
ALL_DIRECTORIES 뷰에서 현재 사용자에게 접근 권한이 있는 디렉터리 목록을 조회하려면 다음 SQL을 사용합니다.
SELECT
directory_name,
directory_path
FROM
ALL_DIRECTORIES;
이 결과는 PL/SQL에서 UTL_FILE.FOPEN
또는 외부 테이블을 사용할 때 지정할 수 있는 디렉터리 목록을 제공합니다.
4. 관련 시스템 뷰 비교
뷰 이름 | 설명 | 비교 항목 |
---|---|---|
ALL_DIRECTORIES | 사용자가 접근 가능한 디렉터리 목록 | 권한 있는 디렉터리만 조회 |
DBA_DIRECTORIES | DB 전체의 디렉터리 객체 목록 | 모든 디렉터리를 조회 (DBA 권한 필요) |
USER_DIRECTORIES | 사용자가 생성한 디렉터리 목록 | 현재 사용자 소유의 디렉터리만 표시 |
5. 디렉터리 객체 생성 및 권한 부여
새로운 디렉터리 객체를 생성하려면 DBA 권한이 필요합니다.
CREATE OR REPLACE DIRECTORY data_export_dir AS '/u01/app/oracle/export';
GRANT READ, WRITE ON DIRECTORY data_export_dir TO hr;
이 설정을 통해 HR 사용자는 data_export_dir
라는 이름을 통해 서버의 해당 경로에 접근할 수 있으며, 파일 읽기 및 쓰기 작업을 수행할 수 있습니다.
6. 보안 관리 시 주의사항
- 디렉터리 객체는 외부 시스템 경로와 직접 연결되므로 보안상 최소 권한 원칙 적용이 중요
- 접근 권한을 부여할 사용자 또는 역할을 명확하게 관리해야 함
- 불필요한 디렉터리 객체는 주기적으로 정리하거나 폐기
- 서버 파일 시스템 권한과 연계된 이중 보안 정책 고려
7. 활용 시나리오
- CSV 파일 내보내기: PL/SQL로 테이블 데이터를 파일로 추출
- 외부 테이블 로딩: 대용량 파일을 Oracle 테이블에 직접 매핑
- 로그 기록: 배치 작업 로그를 파일로 저장
8. 결론
ALL_DIRECTORIES
뷰는 Oracle에서 외부 파일 접근을 안전하게 제어하기 위한 필수 메타데이터 도구입니다. 단순한 목록 조회 그 이상으로, 데이터베이스 보안 정책 수립, ETL 흐름 설계, 운영 자동화 스크립트 구현 등 다양한 실무 분야에서 중요한 역할을 수행합니다. 체계적인 디렉터리 객체 관리는 Oracle 환경의 안정성과 보안을 높이는 데 핵심적인 기초가 됩니다.
출처
- Oracle Database 19c Security Guide - Oracle 공식 문서
- Oracle Database Utilities Guide - Oracle Utilities 문서
- 실무 경험 기반 (2018~2025, 대기업 운영 자동화 및 ETL 구축 프로젝트)
'Database' 카테고리의 다른 글
[ Oracle] 오라클 ALL_INDEXTYPE_OPERATORS 뷰 실무 완전 해석 (0) | 2025.06.23 |
---|---|
[ Oracle] 오라클 ALL_INDEXTYPES 뷰 완전 정복 (0) | 2025.06.23 |
[ Oracle] 오라클 ALL_DIM_LEVEL_KEY 뷰 실무 완전 해석 (0) | 2025.06.23 |
[Oracle] 오라클 NTH_VALUE() 함수로 특정 순위의 값 가져오는 법 (0) | 2025.06.22 |
[ Oracle] 오라클 STATS_MODE() 함수, GROUP BY와 함께 활용하는 방법 (0) | 2025.06.22 |