본문 바로가기
Database/Oracle

[ORACLE] SESSION_PRIVS 뷰 완벽 해설 : 현재 세션이 가진 권한 확인 방법

by Papa Martino V 2025. 10. 9.
728x90

SESSION_PRIVS
[ORACLE] SESSION_PRIVS

 

Oracle Database에서는 보안과 권한 관리가 매우 중요합니다. 특히 DBA나 개발자가 자신의 세션이 어떤 시스템 권한(System Privileges)을 가지고 있는지 확인해야 하는 경우가 자주 발생합니다. 이때 활용되는 핵심 데이터 딕셔너리 뷰가 바로 SESSION_PRIVS입니다. 본 글에서는 SESSION_PRIVS의 구조, 주요 컬럼, 활용 예시, 실무에서의 응용 방법, 그리고 유사 뷰들과의 비교를 통해 이 뷰를 완벽하게 이해할 수 있도록 설명하겠습니다.


1. SESSION_PRIVS 개요

SESSION_PRIVS 뷰는 현재 세션이 보유한 시스템 권한 목록을 보여줍니다. 즉, 어떤 권한을 통해 현재 사용자가 특정 DDL 또는 DML을 수행할 수 있는지를 한눈에 확인할 수 있습니다. 이 뷰는 데이터베이스 접속 시 활성화된 롤(Role)과 직접 부여된 시스템 권한을 합산하여 보여주므로, 현재 세션에서 가능한 권한을 실시간으로 파악하는 데 매우 유용합니다.

이 뷰는 DBA가 아니라 일반 사용자도 접근할 수 있으며, 자신에게 부여된 권한만을 확인할 수 있습니다.


2. 주요 컬럼 설명

컬럼명 데이터 타입 설명
PRIVILEGE VARCHAR2(40) 현재 세션이 보유한 시스템 권한의 이름

SESSION_PRIVS는 단 하나의 컬럼(PRIVILEGE)만을 가지지만, 이 정보가 현재 세션의 권한을 직접적으로 보여주기 때문에 구조는 단순하면서도 활용성은 매우 높습니다.


3. SESSION_PRIVS 조회 예시


-- 현재 세션이 가진 시스템 권한 목록 조회
SELECT * FROM SESSION_PRIVS;

-- 결과 예시
PRIVILEGE
-------------------------
CREATE SESSION
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE
DROP ANY TABLE

위 결과는 해당 세션이 데이터베이스에 접속할 수 있는 CREATE SESSION 권한을 가지고 있으며, 테이블과 뷰를 생성하거나 프로시저를 작성할 수 있고, 다른 스키마의 테이블을 삭제할 수 있는 DROP ANY TABLE 권한까지 보유하고 있음을 의미합니다.


4. 실무 활용 예시

① 권한 진단 시 사용

애플리케이션 배포나 DB 마이그레이션 시, 특정 계정이 필요한 권한을 갖추었는지 점검할 때 SESSION_PRIVS를 활용하면 됩니다. 예를 들어, 새로운 계정으로 접속 후 DDL 작업을 하기 전에 아래 쿼리로 사전 점검이 가능합니다.


SELECT PRIVILEGE
FROM SESSION_PRIVS
WHERE PRIVILEGE LIKE '%CREATE%';

이 쿼리는 현재 세션에서 “CREATE” 관련 권한(테이블, 뷰, 인덱스 등)을 가진 목록만 필터링하여 보여줍니다.

② 트러블슈팅 시 활용

만약 “ORA-01031: insufficient privileges” 오류가 발생한다면, SESSION_PRIVS 뷰를 통해 권한이 실제로 부여되어 있는지 빠르게 확인할 수 있습니다.

③ 보안 점검 자동화 스크립트

보안 감사나 점검 자동화 도구를 만들 때, SESSION_PRIVS를 활용하면 사용자별 세션 권한을 동적으로 확인하여 불필요한 권한이 활성화되어 있는지를 검사할 수 있습니다.


5. SESSION_PRIVS 관련 주요 뷰 비교

뷰 이름 설명 접근 범위 용도
SESSION_PRIVS 현재 세션이 보유한 시스템 권한 현재 사용자 현재 로그인 계정의 유효 권한 확인
USER_SYS_PRIVS 현재 사용자에게 직접 부여된 시스템 권한 현재 사용자 직접 부여된 권한 파악
ROLE_SYS_PRIVS 각 롤(Role)에 부여된 시스템 권한 DB 전체 롤별 권한 관리 및 분석
DBA_SYS_PRIVS 모든 사용자에게 부여된 시스템 권한 DBA 권한 필요 전체 권한 감사 및 보안 점검

위 표를 통해 알 수 있듯이, SESSION_PRIVS는 현재 활성화된 세션의 전체 권한 상태를 빠르게 파악할 수 있는 가장 직접적인 뷰이며, USER_SYS_PRIVS는 직접 부여된 권한만을, ROLE_SYS_PRIVS는 롤 단위로 권한을 분석할 때 유용합니다.


6. SESSION_PRIVS와 ROLE의 관계

SESSION_PRIVS는 현재 세션에서 활성화된 롤(Role)을 기반으로 동작합니다. 만약 세션에서 일부 롤이 비활성화되어 있다면, 그 롤에 부여된 권한은 SESSION_PRIVS 결과에 나타나지 않습니다. 따라서 다음과 같은 SQL을 통해 세션에서 어떤 롤이 활성화되어 있는지 함께 확인하는 것이 중요합니다.


SELECT * FROM SESSION_ROLES;

이를 통해 특정 권한이 SESSION_PRIVS에 보이지 않는 이유가 “롤 비활성화” 때문인지 확인할 수 있습니다.


7. DBA 실무 팁

  • DB 보안 점검 시, SESSION_PRIVS 결과를 ROLE_SYS_PRIVS 및 DBA_SYS_PRIVS와 교차 검증하면 롤 상속 구조로 인해 발생할 수 있는 과도한 권한 부여를 식별할 수 있습니다.
  • 사용자 접속 후 즉시 SESSION_PRIVS를 실행하여 현재 세션의 권한 스냅샷을 저장해두면, 사고 발생 시 로그 분석과 권한 변경 추적에 유용합니다.
  • 일부 보안 정책에서는 최소 권한 원칙(Least Privilege Principle)을 적용해야 하므로, SESSION_PRIVS를 정기적으로 확인하는 자동 점검 프로세스를 구축하는 것이 좋습니다.

8. SESSION_PRIVS 예제: 권한 모니터링 스크립트


-- 세션 권한 자동 점검 스크립트
SET LINESIZE 150
COLUMN PRIVILEGE FORMAT A40
SELECT PRIVILEGE
FROM SESSION_PRIVS
ORDER BY PRIVILEGE;

-- 결과를 로그로 저장
SPOOL session_privs_log.txt
/
SPOOL OFF

위 스크립트를 SQL*Plus나 SQL Developer에서 실행하면, 현재 세션의 권한 목록을 텍스트 로그 파일로 남길 수 있습니다. 이 로그는 보안 감사를 위한 증적 자료로도 활용됩니다.


9. SESSION_PRIVS 관련 보안 관리 포인트

SESSION_PRIVS는 단순히 권한을 확인하는 용도에 그치지 않고, 보안 사고 예방 및 운영 효율화에도 매우 중요한 역할을 합니다. 다음은 DBA가 반드시 숙지해야 할 보안 관리 포인트입니다.

  • 정기 점검: 주기적으로 SESSION_PRIVS를 통해 실제 활성화된 권한을 검토
  • 불필요한 권한 제거: CREATE ANY, DROP ANY, GRANT ANY 등 강력한 권한은 최소화
  • 롤 관리: ROLE_SYS_PRIVS와 함께 점검하여 롤 기반 권한 누적 방지
  • 로그 아카이빙: 주요 세션의 권한 변화를 정기적으로 기록

10. 결론

SESSION_PRIVS는 Oracle Database의 보안과 권한 구조를 이해하는 데 매우 핵심적인 뷰입니다. 특히 현재 세션이 수행 가능한 모든 시스템 권한을 실시간으로 파악할 수 있기 때문에, DBA, 개발자, 보안 담당자 모두에게 필수적인 진단 도구라 할 수 있습니다. SESSION_PRIVS는 단순한 조회용 뷰이지만, 이를 다른 권한 관련 뷰들과 함께 활용하면 데이터베이스 보안 아키텍처의 전반적인 구조를 명확히 이해하고, 권한 누락이나 과도한 부여 문제를 미리 방지할 수 있습니다.


출처

  • Oracle® Database Reference 19c – Data Dictionary Views
  • Oracle Security Best Practices (Oracle White Paper, 2024)
728x90