GRANT, REVOKE : DCL(Data Control Language)

GRANT와 REVOKE 는 권한과 관련된 예약어이다.

GRANT 는 권한을 부여할 때 사용하고 REVOKE는 부여된 권한을 뺏을때 사용한다.

예를들어 DBA가 사용자 계정을 생성 할 때 'CREATE USER' 라는 명령어를 사용한다.
하지만 이렇게 생성된 사용자는 DB에 접속하지 못한다.  접속이 가능하게 하려면 'GRANT'명령어로  'CREATE 'SESSION' 권한(Privilege)을 부여하면 그제서야 그 사용자는 디비에 접근이 가능하다.

SYSTEM PRIVILEGE
DBA만 부여 할 수 있는 권한을 SYSTEM PRIVILEGE 라고 한다.
대표적인 SYSTEM PRIVILEGE는 'CREATE SESSION', 'CREATE TABLE', 'CREATE SEQUENCE', 'CREATE VIEW', 'CREATE PROCEDURE' 가 있다. 

GRANT privilege [, privilege ...]
TO user [, user.... | role... | PUBLIC];


Role
위의 'TO'의 'role' 은 특정 권한들과 그 권한들을 부여받은 사용자들이라고 할 수 있다.
'Role'은 두가지 용도로 사용할 수 있다.
첫번째로는 사용자에게 권한의 집합(role)을 부여하는 것이다. 
두번째로는 'SYSTEM PRIVILEGE' syntex 처럼 'role'을 부여받은 사용자들을 사용자 그룹으로 사용하는 것이다.

1. role 생성
     CREATE ROLE role;
2. role에 권한 설정
     GRANT privilege [,privilege..
     TO role;
3. role 사용자 설정
     GRANT role 
     TO user[, user...]


OBJECT PRIVILEGE
 자신의 스키마에 속해 있는 Object(Table, View, Sequence, Procedure 등)에 대해 타 유저에게 부여하는 권한이다.

객체별 권한


GRANT

GRANT object_privilege [(columns)]
ON object
TO {usre|role|PUBLIC}
[WITH GRANT OPTION]


object_privilege : 객체에 사용가능한 권한(위의 테이블을 참고)
columns : 만약 ON 절의 object 가 Table이나 View일 경우 사용
ON object : Table, View, Sequence, Procedure 등 (위의 테이블을 참고)
TO {user|role|PUBLIC} : 사용자를 일일이 나열할 수도 있고 , role에 소속된 사용자가 될수도 있다. PUBLIC는 모든 사용자라는 뜻 
WITH GRANT OPTION : 이 옵션을 사용하면 TO 절의 대상도 자신이 받은 권한을 다른 유저에게 부여할 수 있게 된다.

USER2는 'WITH GRANT OPTION' 으로 권한을 부여받아서 USER3에게 자신이 받은 권한을 부여 가능하다.




이처럼 'WITH GRANT OPTION' 이나 'TO'절에 'PUBLIC' 을 주는 경우는 잘 생각해보고 사용해야 한다. 잘못된 사용은 보안상 치명적이다.

아래 Data Dictionary View를 통해 자신이 타유저에게 허용한 테이블 및 컬럼 권한이나 자신이 타인에게 받은 권한이나 테이블, 컬럼 등을 조회할 수 있다.

출처 :http://www.oracleclub.com/lecture/1009
데이터 사전 설 명
USER_TAB_PRIVS 객체권한의 소유자, 객체권한 부여자, 객체권한 피부여자를 볼수 있음
USER_TAB_PRIVS_MADE 사용자가 부여한 모든 객체권한
USER_TAB_PRIVS_RECD 사용자가 부여받은 모든 객체권한
USER_COL_PRIVS 객체권한의 소유자, 객체권한 부여자,
객체권한 피부여자의 컬럼의 객체권한
USER_COL_PRIVS_MADE 사용자가 부여한 객체 컬럼에 대한 모든 객체권한
USER_COL_PRIVS_RECD 사용자가 부여받은 객체 컬럼에 대한 모든 객체권한


REVOKE
'REVOKE'는 말 그대로 권한을 뺏는 것을 말한다.

REVOKE {privilege [, privilege...] | ALL}
ON object
FROM {user[, user...] | role | PUBLIC}
[CASCADE CONSTRAINTS] 

REVOKE는 GRANT 에서 WITH GRANT OPTION으로 받은 권한들을 연쇄적으로 제거한다.

아까 위의 GRANT 에 이어서 보도록 하자.

1. USER1은 USER2에게 부여했던 권한을 제거 할 수 있다.
2. USER2 또한 USER3에게 부여했던 권한을 제거 할 수 있다.
3. 하지만 USER1은 USER3에게 부여된 권한을 제거 할 수 없다.
4. USER1이 USER2의 권한을 제거하면 USER3의 권한도 같이 제거된다.



참고

Oracle Database 10g: SQL Fundamentals

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

관리 쿼리 모음  (0) 2012.03.11
UNDO 와 Snapshot too old 에러  (0) 2012.02.26
External Tables 외부 테이블  (0) 2011.09.29
Index  (0) 2011.09.29
[ORACLE] 도움이 되는 내부테이블(?)  (0) 2011.03.02