2020. 7. 2.

[Oracle] 관리자 9장 6 보안 강화를 위한 User와 Role 구현 실습


DB 구축 환경
  • 프로젝트명 : insa
  • User
* insa_ma : 프로젝트 관련 table 소유 스키마
: Segment 생성 시에만 사용됨.
* insa_al : insa_ma segment에 대한 ALTER 작업만 수행함
: Segment에 대한 수정 작업 이외에 사용되지 않음
* insa_in : data 입력과 검색만 수행함
* insa_up : data 수정과 검색 수행함
  • Tablespace
* insa T/S : segment 저장용 tablespace
* indx T/S : index tablespace
  • Role
* r_basic : 접속관련 권한
* r_master : segment에 대한 생성 권한 (default role로 지정 하지 않는다.)
* r_alter : insa_ma segment에 대한 ALTER 권한
* r_insert : insa_ma segment에 대한 INSERT 권한
* r_update : insa_ma segment에 대한 UPDATE, DELETE 권한
  • Table
* insa_ma 스키마의 table목록
in01, in02, in30 : table 구조는 임의로 결정한다.

access matrix

구현 과정
step 1. Tablespace 생성
step 2. User 생성
step 3. Role 생성
step 4. Role에 권한 할당
step 5. 사용자에 role 할당

step 1. Tablespace 생성

CREATE TABLESPACE insa
DATAFILE
'/app/ora12c/oradata/disk1/insa01.dbf' SIZE 2M AUTOEXTEND ON,
'/app/ora12c/oradata/disk2/insa02.dbf' SIZE 2M AUTOEXTEND ON;

CREATE TABLESPACE indx
DATAFILE
'/app/ora12c/oradata/disk2/indx01.dbf' SIZE 1M AUTOEXTEND ON,
'/app/ora12c/oradata/disk1/indx02.dbf' SIZE 1M AUTOEXTEND ON;

SELECT tablespace_name, bytes, file_name FROM dba_data_files;

step 2. User 생성

CREATE USER insa_ma
IDENTIFIED BY insa_ma
DEFAULT TABLESPACE insa
QUOTA UNLIMITED ON insa
QUOTA UNLIMITED ON indx;

CREATE USER insa_al
IDENTIFIED BY insa_al;

CREATE USER insa_in
IDENTIFIED BY insa_in;

CREATE USER insa_up
IDENTIFIED BY insa_up;

SELECT username, default_tablespace, temporary_tablespace, account_status, profile
FROM dba_users
ORDER BY 1;

CREATE TABLE insa_ma.&tn (no NUMBER);
치환 변수를 이용 insa_ma user table을 생성한다.

/

SELECT owner, table_name FROM dba_tables
WHERE owner = 'INSA_MA';

// 소유 스키마 작업 끝난것.

step 3. Role 생성

CREATE ROLE r_basic;

CREATE ROLE r_master
IDENTIFIED BY r_master;
in_master role 암호가 정의된다.

CREATE ROLE r_alter;
CREATE ROLE r_insert;
CREATE ROLE r_update;
SELECT * FROM dba_roles
WHERE role LIKE 'R#_%' ESCAPE '#';

step 4. Role에 권한 할당

GRANT create session TO r_basic
GRANT select ON insa_ma.in01 TO r_basic;
GRANT select ON insa_ma.in02 TO r_basic;
GRANT alter ON insa_ma.in01 TO r_alter;
GRANT alter ON insa_ma.in02 TO r_alter;
GRANT insert ON insa_ma.in01 TO r_insert;
GRANT insert ON insa_ma.in02 TO r_insert;
GRANT update ON insa_ma.in01 TO r_update;
GRANT update ON insa_ma.in02 TO r_update;
GRANT delete ON insa_ma.in01 TO r_update;
GRANT delete ON insa_ma.in02 TO r_update;
GRANT create table, create sequence, create trigger,
create procedure, create view
TO r_master;

SELECT role, privilege FROM role_sys_privs
WHERE role LIKE 'R#_%' ESCAPE '#';

SELECT role, privilege, owner, table_name FROM role_tab_privs
WHERE role LIKE 'R#_%' ESCAPE '#'
ORDER BY 1;

step 5. 사용자에 role 할당

GRANT r_basic, r_master TO insa_ma;
ALTER USER insa_ma
DEFAULT ROLE r_basic;
insa_ma in_basic in_master role 할당 받았지만 in_master role 암호를 통해 인증을 받은 경우만 사용 가능하다.

GRANT r_basic, r_alter TO insa_al;
GRANT r_basic, r_update TO insa_up;
GRANT r_basic, r_insert TO insa_in;

SELECT grantee, granted_role, default_role FROM dba_role_privs
WHERE grantee LIKE 'IN%' AND granted_role = 'R_MASTER';


댓글 없음:

댓글 쓰기