오라클 12c에서 PA 프로세스는 다음의 과정으로 이루어져 있다.
-- 테이터베이스 차원의 분석 캡쳐를 수행
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' );
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' );
- 강좌 URL : http://www.gurubee.net/lecture/4266
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.