클라우드 데이터베이스 Oracle 12c 가이드 (2016년)
권한 분석 (PA) 0 0 12,286

by 구루비스터디 Oracle12c 권한분석 [2023.09.04]


  • 유저나 롤에 과도한 권한이 부여되어 있는지를 확인하는 데 사용

권한 분석 개요

오라클 12c에서 PA 프로세스는 다음의 과정으로 이루어져 있다.

  1. 분석 캡쳐 프로세스( ACP )를 생성한다. 다음 4가지 옵션 중 하나를 선택할 수 있다. 전체 데이터베이스 캡쳐, 롤 캡처, 컨텍스트 캡쳐, 롤과 컨텍스트 조합 캡처
  2. ACP 활성화
  3. 일정 기긴 동안 ACP가 권한 사용 현황을 기록할 때까지 기다린다.
  4. ACP 비활성화
  5. ACP의 결과 생성
  6. ACP의 결과를 분석

권한 분석 예제


-- 테이터베이스 차원의 분석 캡쳐를 수행
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  NAME => 'PRIV_ANALYSIS_DB',
  DESCRIPTION => 'ANALYZE ALL PRIVILEGES IN DB',
  TYPE => DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
END;
/

-- 롤에 의한 캡처를 수행하려는 경우는 다음 문장을 수행
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  NAME => 'PRIV_ANALYSIS_DB',
  DESCRIPTION => 'RECORD PRIVILEGES USE BY PUBLIC',
  TYPE => DBMS_PRIVILEGE_CAPTURE.G_ROLE,
  ROLES => ROLE_NAME_LIST( 'RESOURCE'));
END;
/

-- 롤과 CONTEXT 조합으로 분석 캡처를 하려면 다음을 수행한다.
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  NAME => 'PRIV_ANALYSIS_HR_USER_RESOURCE',
  DESCRIPTION => 'RECORD PRIVILEGE USE BY HR USER WITH RESOURCE',
  ROLES => ROLE_NAME_LIST( 'RESOURCE' );
  CONDITION => 'SYS_CONTEXT( ''USERENV'', ''SESSION_USER'' ) = ''HR''');
END;
/

-- 롤과 CONTEXT 조합으로 분석 캡처를 하려면 다음을 수행한다.
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  NAME => 'PRIV_ANALYSIS_HR_USER_RESOURCE',
  DESCRIPTION => 'RECORD PRIVILEGE USE BY HR USER WITH RESOURCE',
  TYPE => DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT,
  ROLES => ROLE_NAME_LIST( 'RESOURCE' );
  CONDITION => 'SYS_CONTEXT( ''USERENV'', ''SESSION_USER'' ) = ''HR''');
END;
/

-- HR 유저에 대해서만 분석 캡처생성한다.
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  NAME => 'PRIV_ANALYSIS_HR_USER',
  DESCRIPTION => 'RECORD PRIVILEGE USE BY HR USER',
  TYPE => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT;
  CONDITION => 'SYS_CONTEXT( ''USERENV'', ''SESSION_USER'' ) = ''HR''');
END;
/

EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE( NAME => 'PRIV_ANALYSIS_HR_USER' );

DROP TABLE HR.CC_INFO PURGE;

-- 테이블 생성
CREATE TABLE HR.CC_INFO (
  FNAME VARCHAR2( 30 ),
  LNAME VARCHAR2( 30 ),
  CCNUM VARCHAR2( 30 ),
  CCCODE VARCHAR2( 10 ),
  ZIP_CODE VARCHAR2( 10 )
) TABLESPACE EXAMPLE;


INSERT INTO HR.CC_INFO VALUES( 'TOM', 'LEE', '123456789', '1234', '91729' );
INSERT INTO HR.CC_INFO VALUES( 'CHUCK', 'SMITH', '234567891', '2345', '91730' );
INSERT INTO HR.CC_INFO VALUES( 'DAVID', 'KIM', '345678912', '3456', '91731' );
INSERT INTO HR.CC_INFO VALUES( 'VIK', 'MICHELLE', '456789123', '4567', '91732' );
INSERT INTO HR.CC_INFO VALUES( 'FOCUS', 'VISION', '567891234', '5678', '91733' );

COMMIT;

UPDATE HR.CC_INFO SET ZIP_CODE = '99999'
WHERE ZIP_CODE = '91733';

COMMIT;

DELETE FROM HR.CC_INFO
WHERE ZIP_CODE = '99999';

COMMIT;

EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE( NAME => 'PRIV_ANALYSIS_HR_USER' );
EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_CAPTURE( NAME => 'PRIV_ANALYSIS_HR_USER' );

표 Previlege Analysis에 관련된 View

  • DBA_USED_SYSPRIVS : system privilege가 사용되었는지 분석
  • DBA_USED_OBJPRIVS : object privilege가 사용되었는지 분석
  • DBA_USED_PRIVS : system과 object privilege가 사용되었는지 분석
  • DBA_USED_OBJPRIVS_PATH : 어떻게 Privilege가 부여되었는지 분석
  • DBA_UNUSED_PRIVS : system과 object privilege가 사용되지 않앗는지 여부 분석


-- System Previlege가 사용되는지 분석
SELECT USERNAME, USED_ROLE, SYS_PRIV
  FROM DBA_USED_SYSPRIVS
 WHERE USERNAME = 'HR';

 -- Object Privilege가 사용되는지 분석
 SELECT USERNAME, OBJECT_OWNER,
        OBJECT_NAME, OBJECT_TYPE, OBJ_PRIV
   FROM DBA_USED_OBJPRIVS
  WHERE USERNAME = 'HR';

 -- System과 Object Privilege가 사용되었는지 분석
 SELECT USERNAME, SYS_PRIV, OBJ_PRIV,
        OBJECT_OWNER, OBJECT_NAME
   FROM DBA_USED_PRIVS
  WHERE USERNAME = 'HR';

-- 어떻게 Previlege가 획득되었는지 분석
SELECT USERNAME, OBJ_PRIV,
       OBJECT_NAME, PATH
  FROM DBA_USED_OBJPRIVS_PATH
 WHERE USERNAME = 'HR';

-- system과 Object Previlege가 사용되지 않았는지 분석
SELECT USERNAME, SYS_PRIV, OBJ_PRIV,
       OBJECT_OWNER, OBJECT_NAME
  FROM DBA_UNUSED_PRIVS
 WHERE USERNAME = 'HR';

-- 캡처 삭제
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE( NAME => 'PRIV_ANALYSIS_HR_USER' );

"구루비 데이터베이스 스터디모임" 에서 2016년에 "클라우드 데이터베이스 Oracle 12c 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4266

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입