ORACLE 객체 권한(Object Privileges)

Object Privileges(객체 권한)


   객체 권한은 유저가 소유하고 있는 특정한 객체를 다른 사용자들이 엑세스 하거나 조작 할 수 있게 하기 위해서 생성을 합니다.


  - 테이블이나 뷰, 시퀀스, 프로시저, 함수, 또는 패키지 중 지정된 한 오브젝트에 특별한 작업을
    수행 할 수 있게 합니다.
  
  - Object 소유자는 다른 사용자에게 특정 Object Privileges를 부여 할 수 있습니다.

  - PUBLIC으로 권한을 부여하면 회수할 때도 PUBLIC으로 해야 합니다.

  - Object Privileges는 Object Type에 따라서 다릅니다.

  - 기본적으로 소유한 오브젝트에 대한 모든 권한이 자동적으로 획득됩니다

  - WITH GRANT OPTION 옵션은 롤에 권한을 부여할 때는 사용할 수 없습니다


 * Object에 따른 Privileges

























































객체권한


테이블



Sequence


Procedure


  ALTER



 



 


  DELETE




 


 


  EXECUTE


 


 


 



  INDEX



 


 


 


  INSERT




 


 


  REFERENCES



 


 


 


  SELECT





 


  UPDATE




 


 







  위의 표에서
맨 왼쪽에 있는 ALTER, DELETE, EXECUTE.. 등등은 object_privilege란에 오면 되고,
맨 윗줄에 있는 테이블, 뷰, 시퀀스, 프로시져 등등은 ON 다음에 있는 object에 입력하면 됩니다.


Object 권한 부여 문법



 - object_privilege : 부여할 객체 권한의 이름

 - object : 객체명

 - user, role : 부여할 사용자 이름과 다른 데이터 베이스 역할 이름

 - PUBLIC : 오브젝 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있습니다.

 - WITH GRANT OPTION : 권한을 부여 받은 사용자도 부여 받은 권한을 다른 사용자 또는 역할로
                      
부여할 수 있게 됩니다.







오브젝 권한 부여 예제







SQL>GRANT SELECT, INSERT
        ON emp
        TO scott
        WITH  GRANT  OPTION.

 권한이 부여되었습니다.

*설명 : scott 사용자에게 emp테이블을 SELECT, INSERT할 수 있는 권한을 부여했습니다.
          scott 사용자도 다른 사용자에게 그 권한을 부여 할 수 있습니다.
 








Object 권한의 박탈




 - 객체 권한의 철회는 권한을 부여한 부여자만이 수행할수 있습니다.

 - CASCADE CONSTRAINTS : 이 명령어의 사용으로 REFERENCES객체 권한에서 사용된
               참조 무결성 제한을 같이 삭제 할 수 있습니다.

 - WITH GRANT OPTION으로 객체 권한을 부여한 사용자의 객체 권한을 철회하면, 권한을
   부여받은 사용자가 부여한 객체 권한 또한 같이 철회되는 종속철회
발생합니다.








오브젝 권한 철회 예제







SQL>REVOKE SELECT, INSERT
         ON emp
         FROM scott


*설명 : scott 사용자에게부여한 emp테이블에 대한 SELECT, INSERT권한이 회수 됩니다..
         만약 scott사용자가 다른 사용자에게 SELECT, INSERT권한을 부여했으면..
         그 권한들도 같이 철회가 됩니다.
 







WITH GRANT OPTION을 사용하여 객체 권한 취소






 WITH GRANT OPTION을 사용하여 부여한 객체 권한을 취소하면 취소 작업이 연쇄적으로 수행 됩니다.












시나리오

 1. SCOTT가 STORM에게 WITH GRANT OPTION을 사용하여 emp테이블의 SELECT 권한을 부여 합니다.

2. STORM이 emp테이블의 SELECT권한을 TEST에게 부여 합니다.

3. SCOTT가 STORM에게 부여한 emp테이블의 SELECT 권한을 취소 합니다.

결과

 - SCOTTt가 STORM에게 부여한 emp테이블에 대한 SELECT 권한을 취소하면 STORM이 부여한 TEST유저가 emp테이블을 SELECT할 수 있는 권한도 자동으로 취소가 됩니다.

 







객체 권한을 위한 일반 사용자용 데이터 사전 뷰
 
























데이터 사전 뷰


설명


 USER_TAB_PRIVS


 객체 권한의 소유자, 객체 권한 부여자, 객체 권한 피부여자를 볼수있음


 USER_TAB_PRIVS_MADE


 사용자가 부여 모든 객체 권한의 뷰


 USER_TAB_PRIVS_RECD


 사용자가 부여받은 모든 객체 권한의 뷰


 USER_COL_PRIVS


 객체 권한의 소유자, 객체 권한 부여자, 객체 권한 피부여자의 컬럼의 객체
 권한 뷰


 USER_COL_PRIVS_MADE


 사용자가 부여 객체 컬럼에 대한 모든 객체 권한 뷰


 USER_COL_PRIVS_RECD


 사용자가 부여받은 객체 컬럼에 대한 모든 객체 권한 뷰


 


롤(Role)














 

 ROLE 이란 사용자에게 허가할 수 있는 권한들의 집합 이라고 할 수 있습니다.


  - ROLE을 이용하면 권한 부여와 회수를 쉽게 할 수 있습니다.

  - ROLE은 Create Role권한을 가진 User에 의해서 생성 됩니다. 

  - 한 사용자가 여러개의 ROLL을 ACCESS할 수 있고,  여러 사용자에게 같은 ROLE을 부여할 수
    있습니다.

  - 시스템 권한을 부여하고, 취소할 때와 동일한 명령을 사용하여 사용자에게 부여하고, 취소 합니다.

  - 사용자는 ROLE에 ROLE을 부여할 수 있습니다.

  - 오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공  
    됩니다.









   아래의 그림처럼 DBA가 유저들에게 권한을 부여할 때 일일이 권한 하나하나씩을 지정을 한다면 몹시 불편할 것 입니다. DBA가 USER의 역할에 맞도록 Role을 생성하여서 Role만 유저에게 지정을 한다면 보다 효율적으 로 유저들의 권한을 관리 할 수 있습니다.








ROLE의 생성

문법
 


ROLE의  부여 순서
 ① ROLE의 생성  :  CREATE ROLE manager
 ② ROLE에 권한 부여 : GRANT create session, create table TO manager
 ③ ROLE을 사용자 또는 ROLE에게 부여 : GRANT manager TO scott, test;
 





-- role을 생성 합니다.
SQL>
CREATE ROLE manager

-- role에 권한을 부여 합니다.
SQL>GRANT
create session, create table TO manager

-- 권한이 부여된 role을 user나 role에 부여 합니다.
SQL>GRANT
manager TO scott, test;





 




























Dictionary 뷰


내      용


  ROLE_SYS_PRIVS


 Role에 부여된 시스템 권한


  ROLE_TAB_PRIVS


 Role에 부여된 테이블 권한


  USER_ROLE_PRIVS


 현재 사용자가 ACCESS할 수 있는 ROLE


  USER_TAB_PRIVS_MADE


 현재 사용자의 객체에 부여 객체 권한


  USER_TAB_PRIVS_RECD


 현재 사용자의 객체에 부여 객체 권한


  USER_COL_PRIVS_MADE


 현재 사용자 객체의 특정 컬럼에 부여 객체 권한


  USER_COL_PRIVS_RECD


 현재 사용자 객체의 특정 컬럼에 부여 객체 권한