ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - 권한과 ROLE
    DataBase/Oracle 2022. 1. 28. 22:15
    728x90
    반응형

     

     

     

     

     

    사용자 관리

     

    • 사용자의 계정과 암호설정, 권한 부여
    • 객체(테이블, 뷰 등)에 대한 권한 부여
    • 다수의 사용자가 공유하는 데이터베이스 정보에 대한 보안 설정
    • 데이터베이스에 접근하는 사용자마다 서로 다른 권한과 ROLE을 부여함

     

     

     

     

    시스템 권한

     

    • 데이터베이스 관리자가 가지고 있는 권한
    • 오라클 접속, 테이블, 뷰, 인덱스 등의 생성 권한
      - CREATE USER(사용자 계정 만들기)
      - DROP USER(사용자 계정 삭제)
      - DROP ANY TABLE(임의의 테이블 삭제)
      - QUERY REWRITE(함수 기반 인덱스 생성 권한)
      - BACKUP ANY TABLE(테이블 백업)
    • 시스템 관리자가 사용자에게 부여하는 권한
      - CREATE SESSION(데이터베이스에 접속)
      - CREATE TABLE(테이블 생성)
      - CREATE VIEW(뷰 생성)
      - CREATE SEQUENCE(시퀀스 생성)
    • 사용자가 특정 객체를 조작하거나 접근할 수 있는 객체 권한
      - DML(SELECT/INSERT/UPDATE/DELETE)
      - GRANT 권한종류 [(컬럼명)] | ALL
      - ON 객체명 | ROLE 이름 | PUBLIC
      - TO 사용자 이름

     

    시스템 권한 예시

     

    -- <SYSTEM 계정으로 실행>
    CREATE USER C##SAMPLE IDENTIFIED BY SAMPLE;
      
    -- 생성한 SAMPLE 계정으로 접속 시도 시 접속 권한(CREATE SESSION)이 없어서 접속 불가
    GRANT CREATE SESSION TO C##SAMPLE;
    
    -- C##SAMPLE 계정으로 테이블 생성 구문 실행
    -- 테이블 생성 권한(CREATE TABLE)이 없어서 생성 불가
    GRANT CREATE TABLE TO C##SAMPLE;
    
    CREATE TABLE TEST_TABLE(
      COL1 VARCHAR2(20),
      COL2 NUMBER
    );  
    
    -- WITH ADMIN OPTION
    -- : 사용자에게 시스템 권한을 부여할 때 사용함
    --   권한을 부여받은 사용자는 다른 사용자에게 권한을 지정할 수 있음
    GRANT CREATE SESSION TO C##SAMPLE
    WITH ADMIN OPTION;
    
    -- C##SAMPLE2 계정 생성하기 (SYSTEM 계정으로 실행)
    CREATE USER C##SAMPLE2 IDENTIFIED BY SAMPLE2;
    
    -- C##SAMPLE 계정으로 C##SAMPLE2 계정에 접속 권한 부여하기
    GRANT CREATE SESSION TO C##SAMPLE2;
    
    -- 2. 객체 권한 : 사용자가 특정 객체(테이블, 뷰, 시퀀스, 함수)를 조작하거나 접근할 수 있는 권한
    --               DML(SELECT/INSERT/UPDATE/DELETE)
    --               GRANT 권한종류 [(컬럼명)] | ALL
    --               ON 객체명 | ROLE 이름 | PUBLIC
    --               TO 사용자 이름
    
    -- WITH GRANT OPTION
    -- : 사용자가 특정 객체를 조작하거나 접근 할 수 있는 권한을 부여받으면서
    --   그 권한을 다른 사용자에게 다시 부여할 수 있는 권한 옵션
    GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE
    WITH GRANT OPTION;
    
    -- C##SAMPLE 계정에서 C##EMPLOYEE.EMPLOYEE 조회
    SELECT
           EE.*
      FROM C##EMPLOYEE.EMPLOYEE EE;
    
    -- C##SAMPLE 계정이 C##SAMPLE2 계정에게 권한 부여 가능
    GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE2;
    
    -- 권한 철회(REVOKE)
    REVOKE SELECT ON C##EMPLOYEE.EMPLOYEE FROM C##SAMPLE;
    
    -- 참고
    -- WITH GRANT OPTION은 REVOKE시 다른 사용자에게도 부여한 권한을 같이 회수
    -- WITH ADMIN OPTION은 특정 사용자의 권한만 회수가 되고 나머지 다른 사용자에게
    -- 부여한 권한은 회수가 되지 않음
    
    -- 데이터베이스 ROLE - 권한 제어
    -- : 사용자마다 일일히 권한을 부여하는 것은 번거롭기 때문에
    --   간편하게 권한을 부여할 수 있는 방법으로 ROLE을 제공한다.
    
    -- 롤(ROLE)
    -- : 사용자에게 보다 간편하게 부여할 수 있도록 여러 개의 권한을 묶어놓는 것
    --   사용자에게 부여한 권한을 수정하고자 할 때도 롤만 수정하면
    --   그 롤에 대한 권한을 부여 받은 사용자들의 권한이 자동으로 수정된다.
    --   롤을 활성화 하거나 비활성화 해서 일시적으로 권한을 부여하고 철회할 수 있다.
    
    SELECT
           GRANTEE
         , PRIVILEGE
      FROM DBA_SYS_PRIVS
    -- WHERE GRANTEE = 'RESOURCE';
     WHERE GRANTEE = 'CONNECT';
     
    -- 롤의 종류
    -- 1. 사전 정의된 롤 : 오라클 설치 시 시스템에서 기본적으로 제공 됨
    -- EX) CONNECT ROLE, RESOURCE ROLE
    
    -- 2. 사용자가 정의하는 롤
    -- : CREATE ROLE 명령으로 롤 생성
    --   롤 생성은 반드시 DBA 권한이 있는 사용자만 할 수 있음
    --   CREATE ROLE 롤이름; -- 1. 롤 생성
    --   GRANT 권한종류 TO 롤이름; -- 2. 생성 된 롤에 권한 추가
    --   GRANT 롤이름 TO 사용자이름; -- 3. 사용자에게 롤 부여
    
    CREATE ROLE C##MYROLE;
    GRANT CREATE VIEW, CREATE SEQUENCE TO C##MYROLE;
    GRANT C##MYROLE TO C##SAMPLE;
    
    -- MYROLE 권한 확인
    SELECT
           GRANTEE
         , PRIVILEGE
      FROM DBA_SYS_PRIVS
     WHERE GRANTEE = 'C##MYROLE';
     
    -- SAMPLE 계정의 ROLE 확인
    SELECT
           DRP.*
      FROM DBA_ROLE_PRIVS DRP
     WHERE GRANTEE = 'C##SAMPLE';
     
    -- <SAMPLE 계정으로 확인하기>
    CREATE SEQUENCE SEQ_TEST;
    DROP SEQUENCE SEQ_TEST;
    
    CREATE OR REPLACE FORCE VIEW VIEW_TEST
    AS
    SELECT 
           E.A
      FROM EEE E;

     

    728x90
    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    SQL - 동의어(SYSNONYM)  (0) 2022.01.28
    SQL - 인덱스(INDEX)  (0) 2022.01.28
    SQL - 시퀀스(SEQUENCE)  (0) 2022.01.28
    SQL - VIEW, VIEW 옵션  (0) 2022.01.28
    SQL - DDL(Data Definition Language)의 ALTER, DROP  (0) 2022.01.27

    댓글

Designed by Tistory.