개발 지식/[DBMS] Oracle

[Oracle] DCL - GRANT, REVOKE

devGSP 2022. 6. 29. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

DCL - GRANT, REVOKE

 

DCL 챕터에 들어가기 전에

 

설명에 들어가기 전에 우선 사용자(USER)를 하나 생성해 보자.

 

CREATE USER DEVGSP
IDENTIFIED BY 1234;

 

만약 SCOTT로 접속되어 있다면 아래와 같은 오류 메시지가 나올 것이다.

 

dcl_q1

 

SCOTT는 사용자를 생성할 권한이 없기 때문에 오류가 발생하는 것이다. 때문에 SYSTEM으로 접속하여 생성해 주자.

 

dcl_q2

 

사용자가 성공적으로 생성되었다. 아래 쿼리를 실행해 확인해 보자.

 

-- 사용자 정보 조회
SELECT * FROM ALL_USERS
 WHERE USERNAME = 'DEVGSP';

dcl_q2

 

이제 새 사용자로 접속을 해 보자.

 

CONNECT DEVGSP/1234;

dcl_q3

 

위 오류가 발생하며 접속에 실패한다. CREATE SESSION 권한이 없다고 한다.

그럼 주자

 

 

GRANT

 

설명

 

사용자에게 권한을 주려면 DCL(Data Control Language, 데이터 제어어) 중 하나인 GRANT 명령어를 사용해야 한다.

 

 

문법

 

GRANT [객체 권한/ALL PRIVILEGESON [스키마, 객체 이름TO [사용자 이름/롤(Role)이름/PUBLIC] [WITH GRANT OPTION];

 

사용 예시

 

다시 위의 흐름으로 돌아가서 CREATE SESSION 권한을 줘 보도록 하자.

 

GRANT CREATE SESSION TO DEVGSP;

 

만약 실행이 안 된다면 SYSTEM으로 접속하여 다시 실행해 보자.

 

dcl_q4

 

그러면 이제 새로 만든 사용자로 접속하여 임시 테이블을 하나 만들어 보자.

 

CONNECT DEVGSP/1234;

CREATE TABLE TB_TEMP_DCL(
  COL_TEST NUMBER(5),
  COL_TEST2 VARCHAR(10)
);

dcl_q5

 

 

ㅅㅂ 또 안 된다고 난리다. CREATE TABLE을 실행하는 데 필요한 권한이 없다고 한다.

다시 SYSTEM으로 접속하여 아래 쿼리를 실행해 테이블 생성 권한을 주자.

 

GRANT CREATE TABLE TO DEVGSP;

 

다시 새 사용자로 접속하여 테이블을 생성하면..!

 

CONNECT DEVGSP/1234;

CREATE TABLE TB_TEMP_DCL(
  COL_TEST NUMBER(5),
  COL_TEST2 VARCHAR(10)
);

dcl_q6
dcl_q7
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

또 안 된다. 테이블 스페이스에 권한이 없다고 한다. 테이블 스페이스에 대한 권한 할당도 필요하다.

다시 SYSTEM으로 접속하여 아래 쿼리를 실행해 테이블 스페이스 권한도 할당해 주자.

 

GRANT UNLIMITED TABLESPACE TO DEVGSP;

 

다시 새 사용자로 접속하여 테이블 생성 쿼리를 재실행하자.

 

CONNECT DEVGSP/1234;

CREATE TABLE TB_TEMP_DCL(
  COL_TEST NUMBER(5),
  COL_TEST2 VARCHAR(10)
);

dcl_q8

 

이 평범한 메시지가 이렇게나 반가울 수가 없다.

다음엔 다시 이 테이블 생성 권한을 회수해 보자.

 

 

REVOKE

 

설명

 

사용자에게서 권한을 박탈하는 DCL 명령어.

 

 

문법

 

REVOKE [객체 권한/ALL PRIVILEGES(필수)] (ON [스키마.객체 이름]) FROM [사용자 이름/롤(Role) 이름/PUBLIC(필수)]

 

 

사용 예시

 

권한을 제어할 수 있는 SYSTEM으로 접속한 후 아래 쿼리를 실행해 보자.

 

REVOKE CREATE TABLE FROM DEVGSP;

dcl_q8

 

다시 새 사용자로 접속하여 아까 생성한 테이블과 다른 이름으로 테이블을 생성해 보자.

 

CONNECT DEVGSP/1234;

CREATE TABLE TB_TEMP_DCL2(
  COL_TEST NUMBER(5),
  COL_TEST2 VARCHAR(10)
);

dcl_q8

 

다시 테이블 생성 권한이 사라진 것을 확인할 수 있다.

반응형