DBAtlas · 데이터베이스 운영 아틀라스

privilege analysis로 사용되지 않는 권한 찾기

Oracle보안

명령어

-- 1) Capture privilege usage for a specific user:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
    name        => 'CAP_APP_USER',
    description => 'Actual privilege usage of the application user',
    type        => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
    condition   => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''CUSTOMER_APP''');
  DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/
-- Other types: G_DATABASE (whole DB), G_ROLE (roles => role_name_list('DBA')), G_ROLE_AND_CONTEXT

-- 2) After a representative workload (including month end), stop and generate results:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE(name => 'CAP_APP_USER');
  DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/

-- 3) Used and never-used privileges:
SELECT username, sys_priv, obj_priv, object_owner, object_name, used_role
FROM   dba_used_privs   WHERE capture = 'CAP_APP_USER';
SELECT username, sys_priv, obj_priv, object_owner, object_name
FROM   dba_unused_privs WHERE capture = 'CAP_APP_USER';

-- 4) Through which role chain was the privilege used?
SELECT username, sys_priv, used_role, path
FROM   dba_used_sysprivs_path WHERE capture = 'CAP_APP_USER';

-- 5) Cleanup:
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE(name => 'CAP_APP_USER');

하는 일

privilege analysis는 선택한 범위(데이터베이스 전체, 롤, 조건)에서 실제로 사용된 시스템/객체 권한을 런타임에 기록한다. 결과는 사용되지 않은 권한을 나열하므로 최소 권한 원칙에 따라 REVOKE를 계획할 수 있다.

사용 시점

DBA/ANY 권한을 가진 애플리케이션 계정을 정리할 때, 감사 전 권한 검토 시, 패키지 애플리케이션에 실제로 필요한 권한을 파악할 때.

주의

2018년부터 Enterprise Edition에 포함되어 있다(이전에는 Database Vault 라이선스 필요). 추가 라이선스가 없다. 캡처 중에는 약간의 오버헤드가 있다. 결과는 캡처 기간의 워크로드만 반영한다. 월말, 연말, 긴급 작업이 실행되지 않았다면 "미사용"으로 표시된 권한도 필요할 수 있으므로 단계적으로 회수한다. 한 번에 하나의 캡처만 활성화할 수 있으며, 유일한 예외로 G_DATABASE 캡처는 하나의 롤 또는 context 캡처와 함께 활성화할 수 있다.

DBAtlas에서 열기 →

관련 항목