DCL (Data Control Language)
데이터를 다루기 위한 권한을 다루는 언어이다.
사용자 계정에 DB, DB객체에 대한 접근 권한을 부여(GRANT)하고 회수(REVOKE)하는 언어.
* 권한의 종류
1) 시스템 권한 : DB접속, 객체 생성 권한
1-1. CREATE SESSION : 데이터 베이스 접속 권한
1-2. CREATE TABLE : 테이블 생성 권한
1-3. CREATE VIEW : 뷰 생성 권한
1-4. CREATE SEQUENCE : 시퀀스 생성 권한
1-5. CREATE PROCEDURE : 함수(프로시져) 생성 권한
1-6. CREATE USER : 사용자 계정 생성 권한
1-7. DROP USER : 사용자 계정 삭제 권한
2) 객체 권한 : 특정 객체를 조작할 수 있는 권한
(권한 종류) : (설정 가능한 객체)
2-1. SELECT : TABLE, VIEW, SEQUENCE
2-2. INSERT : TABLE, VIEW
2-3. UPDATE : TABLE, VIEW
2-4. DELETE : TABLE, VIEW
2-5. ALTER : TABLE, SEQUENCE
2-6. REFERENCES : TABLE
2-7. INDEX : TABLE
2-8. EXECUTE : PROCEDURE
USER - 계정
1. 관리자 계정 : 데이터베이스의 생성과 관리를 담당하는 계정이다.
모든 권한과 책임을 가진 계정이다.
예시) sys(최고관리자), system(sys의 하위 관리자)
2. 사용자 계정 : 데이터베이스에 대해 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정.
업무에 필요한 최소한의 권한만 가지는 것을 권장한다.
계정 생성과 권한 부여 및 회수
(sys) 최고관리자 계정으로 접속하고
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE; 를 통해 예전 SQL 방식을 허용하여
계정명을 간단히 작성 가능할 수 있게 한다.
[사용자 계정 작성법]
CREATE USER 사용자계정 IDENTIFIED BY 비밀번호;
(sys) DB 접속 권한을 부여한다.
GRANT CREATE SESSION TO 사용자계정;
(sys) 사용자계정에게 테이블 생성 권한과 데이터 저장 공간 할당 권한을 부여한다.
GRANT CREATE TABLE TO 사용자계정; -- 테이블 생성 권한 부여
ALTER USER 사용자계정 DEFAULT TABLESPACE SYSTEM QUOTA UNLIMITED ON SYSTEM; -- 데이터 저장 공간 할당
* ROLE : 권한의 묶음이다.
-> 묶어둔 권한(ROLE)을 특정 계정에 부여한다.
-> 해당 계정은 지정된 권한을 이용해 특정 역할을 갖게 된다.
CONNECT : DB 접속 관련 권한을 묶어둔 ROLE 예약어이다.
RESOURCE : DB 사용을 위한 기본 객체 생성 권한을 묶어둔 ROLE 예약어이다.
예시)
GRANT CONNECT, RESOURCE TO 사용자계정;
-> DB 접속 관련 권한 및 DB 사용을 위한 기본 객체 생성 권한을 부여함.
( 위의 예시처럼 GRANT CREATE TABLE TO 사용자계정; 과 같이 따로 권한을 부여할 필요가 없다 )
sys 계정을 접속한 상태라면
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'CONNECT';
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'RESOURCE';
이를 사용할 수 있는데
각각 CONNECT 롤이 포함하고 있는 권한을 조회하거나 RESOURCE 롤이 포함하고 있는 권한을 조회할 수 있다.
다른 사용자 계정에 있는 테이블을 조회하고 싶을 때
sample_10과 sample_20 계정이 있다고 치고
sample_10 계정엔 ALPHABET 테이블이 있다.
sample_20 계정을 통해 ALPHABET 테이블을 조회하고 싶다면
sample_10 계정으로 sample_20 계정에게 해당 테이블을 조회할 수 있는 권한을 부여해야 한다.
[작성법]
GRANT 객체권한 ON 객체명 TO 사용자명;
예시)
GRANT SELECT ON ALPHABET TO sample_20;
권한을 다시 회수하고 싶다면
[작성법]
REVOKE 객체권한 ON 객체명 FROM 사용자명;
예시)
REVOKE SELECT ON ALPHABET FROM sample_20;