데이터 제어어(Data Control Language)는 말 그대로 데이터를 제어하기 위한 언어이다.
이 데이터 제어어에는 권한을 관리하기위한 GRANT / REVOKE 등의 언어가 있다.
권한에는 시스템 권한과 객체 권한이 있는데 각 권한별로 권한을 어떻게 부여하고 회수하는지 알아보자.
1. 시스템 권한
-오라클 데이터베이스의 시스템 권한은 사용자 생성과 정보 수정 및 삭제, 데이터베이스 접근, 오라클 데이터베이스의 여러 자원과 객체 생성 및 관리 등의 권한을 포함한다.
- 데이터베이스 접속, 사용자 및 오브젝트 생성 등
기본적으로 다음과 같은 권한들이 있다.
시스템 권한 분류 | 시스템 권한 | 설명 |
USER (사용자) 관련 권한 | CREATE USER | 사용자 생성 권한 |
ALTER USER | 생성된 사용자의 정보 수정 권한 | |
DROP USER | 생성된 사용자의 삭제 권한 | |
SESSION (접속) 관련 권한 | CREATE SESSION | 데이터베이스 접속 권한 |
ALTER SESSION | 데이터베이스 접속 상태에서 환경 값 변경 권한 | |
TABLE 관련 권한 | CREATE TABLE | 자신의 테이블 생성 권한 |
CREATE ANY TABLE | 임의의 스키마 소유 테이블 생성 권한 | |
ALTER ANY TABLE | 임의의 스키마 소유 테이블 수정 권한 | |
DROP ANY TABLE | 임의의 스키마 소유 테이블 삭제 권한 | |
INSERT ANY TABLE | 임의의 스키마 소유 테이블 데이터 삽입 권한 | |
UPDATE ANY TABLE | 임의의 스키마 소유 테이블 데이터 수정 권한 | |
DELETE ANY TABLE | 임의의 스키마 소유 테이블 데이터 삭제 권한 | |
SELECT ANY TABLE | 임의의 스키마 소유 테이블 데이터 조회 권한 | |
INDEX (인덱스) 관련 권한 | CREATE ANY INDEX | 임의의 스키마 소유 테이블의 인덱스 생성 권한 |
ALTER ANY INDEX | 임의의 스키마 소유 테이블의 인덱스 수정 권한 | |
DROP ANY INDEX | 임의의 스키마 소유 테이블의 인덱스 삭제 권한 |
1 - 1 권한 부여
- GRANT [시스템 권한 / ROLE ] TO [사용자 이름 / ROLE 이름 / PUBLIC] [WITH ADMIN OPTION]
- PUBLIC : 시스템 권한 및 ROLE 을 모든 사용자에게 부여
- WITH ADMIN OPTION : 부여받은 권한을 다른 사용자 및 ROLE에게 부여할 수 있는 권한도 함께 부여받는다.
(현재 사용자 권한이 사라져도 권한을 재부여한 다른사용자의 권한은 유지된다.)
GRANT CREATE TABLE, CREATE USER TO SCOTT WITH ADMIN OPTION;
테이블 생성과 유저 생성 권한을 SCOTT라는 유저에게 부여하고 이를 재부여할 수 있는 권한을 주는 구문이다.
1 - 2 권한 회수
- REVOKE [시스템 권한 / ROLE] FROM [사용자 이름 / ROLE 이름 / PUBLIC]
REVOKE CREATE TABLE, CREATE USER FROM SCOTT;
부여한 테이블 생성 권한과 유저 생성 권한을 SCOTT이라는 유저에게서 회수한다.
2. 오브젝트 권한 (객체 권한)
- 객체 사용에 대한 권한
- 객체 권한은 테이블이나 뷰, 시퀀스, 함수 등과 같은 객체별로 DML(SELECT, INSERT, DELETE)을 사용할 수 있는 권한 설정
OBJECT 권한 | 설명 |
ALTER | 객체에 대해 변경 할 수 있는 권한 |
COMMENT | 객체에 대해 COMMENT 할 수 있는 권한 |
DELETE | 객체에 대해 자료를 삭제할 수 있는 권한 |
GRANT | 객체에 대해 GRANT 할 수 있도록 하는 권한 |
INDEX | 인덱스를 생성할 수 있는 권한 |
RENAME | 이름을 변경할 수 있는 권한 |
INSERT | 데이터를 삽입할 수 있는 권한 |
SELECT | 데이터를 조회할 수 있는 권한 |
UPDATE | 데이터를 갱신할 수 있는 권한 |
EXECUTE | 프로시저, 함수, 패키지를 실행할 수 있는 권한 |
REFERENCES | 데이터를 참조할 수 있는 권한 |
객체별 권한 정리
객체 권한 | TABLE | VIEW | SEQUENCE | PROCEDURE |
SELECT | O | O | O | |
INSERT | O | |||
DELETE | O | O | ||
ALTER | O | O | ||
INDEX | O | |||
UPDATE | O | O | ||
REFERENCE | O | |||
EXECUTE | O |
2 - 1 객체 권한 부여
- GRANT [객체 권한] ON [스키마.객체이름] TO [사용자 이름 / ROLE 이름 / PUBLIC] [WITH GRANT OPTION]
- WITH ADMIN OPTION : 부여받은 권한을 다른 사용자 및 ROLE에게 부여할 수 있는 권한도 함께 부여받는다.
(현재 사용자 권한이 사라지면 다른 사용자에게 재부여된 권한도 함께 사라진다.)
GRANT INSERT ON EMP_TEST TO SCOTT WITH ADMIN OPTION;
EMP_TEST 객체의 삽입 권한을 SCOTT에게 부여하고 재부여할 수 있는 권한도 함께 부여한다.
2 - 2 권한 회수
- REVOKE [권한 / ALL] ON [스키마.객체이름] FROM [USER / ROLE / PUBLIC] [CASCADE CONSTRAINTS]
- CASCADE CONSTRAINTS : 참조 객체에 사용된 참조 무결성 제약을 함께 삭제할 수 있음.
- 객체권한의 회수는 부여한 사용자만이 할 수 있음.
REVOKE INSERT ON EMP_TEST FROM SCOTT;
EMP_TEST 의 삽입 권한을 SCOTT유저로부터 회수한다.