본문 바로가기

.주제별/SQL,DB

SQL)강의- 제 16 장 시스템 권한(Privileges)

출처 : http://naver.kaist.ac.kr/oracle_sql/s16.htm

 

1. 시스템 권한

    ◈80개 이상의 권한이 있다.
    ◈DBA는 상위 레벨의 시스템 권한을 갖는다.
    ◈새로운 사용자 생성
    ◈사용자 삭제
    ◈테이블 삭제
    ◈테이블 백업
    ◈DBA는 SQL 명령인 CREATE USER를 써서 사용자를 생성한다.
    ◈시스템 권한은 대개 데이터 베이스 관리자 (DBA)가 부여한다.

    시스템 권한

    할 수 있는 일

    CREATE USER

    다른 Oracle 사용자를 생성할 수 있게 한다.

    DROP USER

    다른 사용자를 삭제 할 수 있다.

    DROP ANY TABLE

    스키마에 있는 테이블을 삭제 할 수 있다.

     

사용자 생성

    ◈DBA는 여러 시스템 권한을 사용하여 Oracle의 새로운 사용자를 생성 할 수도 있다.

      CREATE   USER  사용자    IDENTIFIED BY  암호 ;

    ◈사용자는 생성되는 사용자의 이름이고, 암호는 로그인을 할 때 사용된다.

    ♠실습 : 

    SQL> CREATE USER scott IDENTIFIED BY tiger;

     

사용자 시스템 권한

    ◈사용자를 생성하면 DBA는 GRANT 명령을 실행하여 사용자에게 권한을 부여할 수 있다.
    ◈전형적인 사용자 권한

    시스템 권한

    권한을 통해 할 수 있는 일

    CREATE SESSION

    데이터베이스에 접속할 수 있도록 한다.

    CREATE TABLE

    사용자가 테이블을 생성할 수 있도록 한다.

    CREATE SEQUENCE

    사용자가 Sequence를 생성할 수 있도록 한다.

    CREATE VIEW

    사용자가 View를 생성할 수 있도록 한다.

    CREATE PROCEDURE

    사용자가 Store Procedure 또는 패키지를 생성할 수 있도록 한다.

    ◈DBA는 사용자에게 시스템 권한을 할당하기 위해 GRANT명령을 이용한다.

      GRANT 권한[,권한…] TO 사용자[,사용자…] ;

    ◈사용자가 권한을 받으면 즉시 그 권한을 사용할 수 있다.

    ♠실습 :  

    SQL> GRANT  Create table, create sequence, create view  TO scott;

     

2. Role이란 무엇인가?

Role이란?

    ◈Role은 사용자에게 허가할 수 있는 관련된 권한들의 그룹이다.
    ◈이러한 role을 이용하면 권한 부여와 회수를 쉽게 할 수 있다.
    ◈한 사용자가 여러 role을 액세스할 수 있고 다른 여러 사용자에게 같은 role을 지정할 수 있다.
    ◈DBA가 role을 생성해야 하고 다음에 권한을 role에 지정하고 사용자에게 role을 부여한다.
    ◈Syntax : CREATE ROLE Role;
                     Role; - 생성되는 role의 이름임.
    ◈Role이 생성되면 DBA는 role에 권한을 지정한 것과 마찬가지로 사용자에게 role을 지정하기 위해
       GRANT명령을 사용할 수 있다.
     

    ♠실습 : Role을 생성하고 생성된 role에 테이블과 뷰를 생성할 수 있는 권한을 설정한다.
               이 role을 Velasquez와 Ropeburn에게 준다. 

    SQL> CREATE ROLE manager;
    SQL> GRANT create table. Create view TO manager;
    SQL> GRANT manager TO velaquz. Ropeburn;

     

 3. 암호 변경

    ◈사용자가 생성되었을 때 각 사용자는 DBA가 초기화한 암호를 갖게 된다.
    ◈ALTER USER 명령을 써서 암호를 변경한다.
    ◈ Syntax  :   ALTER USER  사용자  IDENTIFIED BY  암호 ;
    ◈사용자는 사용자의이름이고, 암호는 새로운 암호임.

    ♠실습 :  

    SQL> ALTER USER scott IDENTIFIED BY lion;

     

4. 객체 권한 부여

    ◈DBA는 객체 권한을 사용자에게 부여하여 특정 테이블,뷰,Sequence,Stored Procedure에 대한
       작업을 수행할 수 있게 한다.
    ◈소유자는 객체에 대한 모든 권한을 갖는다.
    ◈권한은 객체 유형에 따라 매우 다양한다.
    ◈소유자는 소유한 객체에 대해 특정 권한을 다른 사용자에게 줄 수 있다.

    객체권한

    테이블

    Sequence

    Procedure

    Snapshot

    ALTER

     

     

     

    DELETE

     

     

     

    EXECUTE

     

     

     

     

    INDEX

     

     

     

     

    INSERT

     

     

     

    REFERENCES

     

     

     

     

    SELECT

     

    UPDATE

     

     

     

    ◈ 객체권한부여 Syntax

      GRANT  객체 권한[(Column)]
      ON  객체
      TO {사용자|Rrle|PUBLIC}
      [WITH GRANT OPTION] ;

    ◈객체권한은 허가되는 객체권한이고,
    ◈ALL은 모든 객체권한.
    ◈Column은 권한이 허가된 테이블이나 뷰의 column.
    ◈ON 객체는 권한이 허가된 객체.
    ◈TO는 권한을 허가받을 사용자.
    ◈PUBLIC은 모든 사용자에게 객체권한을 허가한다.
    WITH GRANT OPTTION은 권한을 받은 사용자가 다른 사용자에게 권한을 부여할 수 있도록 한다. 

    ♠실습 : s_emp 테이블을 select와 update를 할 수 있도록 scott와 Rich에게 권한을 주도록 하라. 

    SQL> GRANT select,update   ON    s_emp    TO    scott, rich
                 WITH GRANT OPTION;

     

    ♠실습 : scott이 시스템의 모든 사용자에게 s_dept테이블을 Query할 수 있게 하라.  

    SQL> GRANT update(first_name,last_name)  ON    s_emp   TO    PUBLIC;

     

5. 부여된 권한 확인

    ◈부여받거나 부여한 권한을 확인하기 위해 Dictionary뷰를 액세스한다.
    ◈예를 들어,DELETE 권한이 없는 테이블의 행을 삭제하는 것과 같이, 허가되지 않은 작업을
      수행 하려 한다면 Oracle7 Server는 작업을 허용하지 않을 것이다. Oracle7 Server의 오류 메시지인
      "테이블이나 뷰가 없습니다"를 받게 되면 다음 중 한 가지를 했다는 뜻이다:
    ◈않는 테이블이나 뷰의 이름 사용
    ◈적절한 권한이 없는 테이블이나 뷰에 대한 작업 시도 

    부여받은 권한은 무엇인가?

        Dictionary뷰를 액세스하면 부여받은 권한을 볼 수 있다.

    데이터 사전 테이블

    설명

    ROLE_SYS_PRIVS

    role에 부여된 시스템 권한

    ROLE_TAB_PRIVS

    role에 부여된 테이블 권한

    USER_ROLE_PRIVS

    사용자가 액세스할 수 있는 role

    USER_TAB_PRIVS_MADE

    사용자가 부여한 객권한

    USER_TAB_PRIVS_RECD

    사용자에게 부여된 객체 권한

    USER_COL_PRIVS_RECD

    특정 Column에 대하여 사용자에게 부여된 객체 권한

     

6. 객체에 대한 권한 회수

    ◈REVOKE 명령을 써서 다른 사용자에게 허가된 권한을 취소한다.
    ◈WITH GRANT OPTION에 의해 다른 사용자에게 허가된 권한도 취소된다.
    ◈Alice는 S_DEPT 테이블에 대해 Scott에게 준 SELECT와 INSERT권한을 회수한다.
    ◈ Syntax

      REVOKE  [권한 (, 권한...):ALL}
      ON   객체
      FROM {사용자[, 사용자...]:role |PUBLIC}  
       

    ♠실습 : 

    SQL> REVOKE  select,  insert      ON  s_dept   FROM  scott

     

7. Synonym생성

    ◈Synonym을 생성하여 객체를 객체에 대한 액세스를 간단하고 쉽게 하게 한다.
    ◈다른 사용자가 소유한 테이블에 대한 참조
    ◈긴 객체 이름을 짧게 만든다.
    ◈다른 사용자가 소유한 테이블을 참조하려면 테이블 생성자의 이름 뒤에 점을 찍고 테이블 이름을
      써야 한다.
    ◈스키마로 객체 이름을 수식할 필요가 없도록 Synonym을 만들어 객체에 대한 다른 이름을 쓴다.
    ◈뷰와 같이 긴 이름으로 된 객체에 이런 방법을 쓰면 아주 유용하다.
    ◈ Syntax

      CREATE  [PUBLIC]  동의어
          FOR  객체;

           PUBLIC은 모든 사용자가 액세스할 수 있는 Synonym을 만들게 하고 동의어는 생성되는
           Synonym의 이름, 객체는 생성된 동의어에 대한 객체이다.
     

    Guideline : Private Synonym은 동일한 사용자가 소유한 다른 객체 명과는 달라야 한다.
     

    ♠실습 : Scott이 Alice의 S_DEPT 테이블에 대해 S_DEPT라는 Private Synonym을 만든다. 

    SQL> CREATE  SYNONYM  s_dept   FOR    alice.s_dept;

     

    ♠실습 : 빠른 참조를 위해 DEPT_SUM_VU에 대한 Synonym을 만든다.  

    SQL> CREATE  SYNONYM  d_sum    FOR    dept_sum_vu;

     

    ♠실습 : DBA는 모든 사용자가 액세스할 수 있는 Public Synonym을 만들 수 있다 

    SQL> CREATE  PUBLIC  SYNONYM  s_dept   FOR    alice.s_dept;

     

    Synonym 삭제

    Synonym을 삭제하려면 DROP SYNONYM 명령을 쓰시오. DBA만이 Public Synonym 을 삭제할 수 있다. 

    SQL> DROP  SYNONYM  s_dept;