본문 바로가기

카테고리 없음

Oracle_9. DCL(GRANT, REVOKE)

  • 권한 부여(GRANT)
    • 시스템권한
    • 객체접근권한
  • 권한 회수(REVOKE)

 

▶ DCL ?

* DCL (DATA CONTROL LANGUAGE)
: 데이터 제어 언어

계정에게 시스템권한 또는 객체접근권한을 부여(GRANT)하거나 회수(REVOKE)하는 언어

 

* 권한 부여(GRANT)
    1. 시스템권한 : 특정 DB에 접근하는 권한
                 객체들을 생성할 수 있는 권한
    2. 객체접근권한 : 특정 객체들에 접근해서 조작할 수 있는 권한
        
        
1. 시스템 권한
    - 시스템 권한의 종류
    CREATE SESSION : 계정에 접속할 수 있는 권한
    CREATE TABLE   : 테이블을 생성할 수 있는 권한
    CREATE VIEW    : 뷰를 생성할 수 있는 권한
  
[표현법]
GRANT 권한1, 권한2,  ... TO 계정명;
        
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ        
2. 객체 권한
	특정 객체들을 조작할 수 있는 권한
    조작 : SELECT, INSERT, UPDATE, DELETE

[표현법]
GRANT 권한종류 ON 특정객체 TO 계정명;
    
    권한종류        |      특정객체
-----------------------------------------
    SELECT          |   TABLE, VIEW, SEQUENCE
    INSERT          |   TABLE, VIEW
    UPDATE          |   TABLE, VIEW
    DELETE          |   TABLE, VIEW
    
    

<롤 ROLE>
: 특정 권한들을 하나의 집합으로 모아놓은 것

- RESOURCE : CREATE TABLE, CREATE SEQUENCE, SELECT, INSERT, ...
        	(특정 객체들을 생성 및 조작할 수 있는 권한)(일반 개발자용 권한)
- CONNECT : CREATE SESSION(DB에 접속할 수 있는 권한)

[표현법]   
GRANT CONNECT, RESOURCE TO 계정명;

 

* 권한 회수(REVOKE)
: 권한을 회수할 때 사용하는 명령어

[표현법]
REVOKE 권한1, 권한2, .. FROM 계정명;

 


-- 1. SAMPLE 계정 생성하기
CREATE USER SAMPLE IDENTIFIED BY SAMPLE;

 

 

-- 2. SAMPLE 계정에 접속하기 위한 CREATE SESSION 권한 부여
GRANT CREATE SESSION TO SAMPLE;

-- 테이블생성 권한 없어서 오류발생

 

 

-- 3_1. SAMPLE 계정에 테이블을 생성할 수 있는 CREATE TABLE권한 부여
GRANT CREATE TABLE TO SAMPLE;

-- SAMPLE 계정에 TABLESPACE가 아직 할당되지 않아서 오류 발생

 

-- 3_2. SAMPLE 계정에 테이블 스페이스를 할당해주기(SAMPLE 계정변경)
ALTER USER SAMPLE QUOTA 2M ON SYSTEM;
--QUOTA : 몫 나누어주다, 할당하다

 

-- 4. 뷰 만들어보기 

-- 권한부여 받기 전
CREATE VIEW V_TEST
AS SELECT * FROM TEST;

 

-- 4. SAMPLE 계정에 뷰를 생성할 수 있는 CREATE VIEW 권한 부여
GRANT CREATE VIEW TO SAMPLE;

 

-- 권한부여 받은 후
CREATE VIEW V_TEST
AS SELECT * FROM TEST;

 

-- 5. SAMPLE계정에서 KH계정의 테이블에 접근해서 조회해보기
SELECT *
FROM KH.DEPARTMENT; --조회권한을 받지 않았으므로 접근불가, 에러발생함

SELECT *
FROM KH.EMPLOYEE;   --조회권한을 받았으므로 조회가능함

 

-- 6. SAMPLE 계정에서 KH계정의 테이블에 접근해서 행 삽입하기
--          KH의 DEPARTMENT테이블에 회계부 부서 추가
INSERT INTO KH.DEPARTMENT VALUES('D0', '회계부', 'L2');
-- 권한받지 않았으므로 에러발생함

 

-- 7. SAMPLE 계정에서 테이블을 생성할 수 없도록 권한 회수하기
REVOKE CREATE TABLE FROM SAMPLE;

 

-- 8. 테이블생성하기
CREATE TABLE TEST2 (NUM NUMBER);
-- 테이블 생성권한 회수로 인한 권한 불충분 에러발생