본문 바로가기

SQL/기본 개념

DCL(Data Control Language)

▶ 계정(사용자)

  • 관리자 계정 : 데이터베이스의 생성과 관리를 담당하는 계정
                          모든 권한과 책임을 가지는 계정
                          ex) sys(최고 관리자), system(sys에서 권한이 몇 개 제외된 관리자)
  • 사용자 계정 : 데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정으로,
                          업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 함
                          ex) 개별 이니셜 계정

▶ DCL(Data Control Language)

  • DCL(Data Control Language) : 계정에 DB와 DB 객체에 대한 접근 권한을 부여하고 회수하는 언어
    1) GRANT : 권한 부여
    2) REVOKE : 권한 회수
  • 권한의 종류
    1) 시스템 권한 : DB 접속, 객체 생성 권한
    CREATE SESSION : 데이터베이스 접속 권한
    CREATE TABLE : 테이블 생성 권한
    CREATE VIEW : 뷰 생성 권한
    CREATE SEQUENCE : 시퀀스 생성 권한
    CREATE PROCEDURE : 함수(프로시져) 생성 권한
    CREATE USER : 사용자(계정) 생성 권한
    DROP USER : 사용자(계정) 삭제 권한
    DROP ANY TABLE : 임의 테이블 삭제 권한

    2) 객체 권한 : 특정 객체를 조작할 수 있는 권한
권한 종류 설정 객체
SELECT TABLE, VIEW, SEQUENCE
INSERT TABLE, VIEW
UPDATE TABLE, VIEW
DELETE TABLE, VIEW
ALTER TABLE, SEQUENCE
REFERENCES TABLE
INDEX TABLE
EXECUTE PROCEDURE
-- 0) SQL 구문 작성 형식을 예전(11g) 오라클 SQL 형식으로 사용하도록 변경
-- 이유) 변경하지 않으면 사용자명 앞에 c##을 붙여야함 -> 번거로움
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;

-- 1) [sys 관리자 계정] 사용자 계정 생성
CREATE USER hong_gil_dong IDNTIFIED BY hong1234;

-- 2) 생성된 계정에 접속하기 위한 접속방법 추가
--> 데이터베이스(D) -> 새 데이터베이스 연결 [오류 발생]
-- 이유) 사용자 계정에 CREATE SESSION 권한이 없음 -> 로그인 실패

-- 3) [sys 관리자 계정] 생성된 계정에 DB 접속 권한 부여
GRANT CREATE SESSION TO hong_gil_dong;

-- 4) 다시 생성된 샘플 계정 접속 방법 추가 --> 로그인 성공

-- 5) 이 상태에서 생성된 사용자 계정으로 테이블 생성 시도할 경우, 실패 [오류 발생]
-- 이유) DB 접속 권한은 있지만 테이블 생성 권한은 없음

-- 6) [sys 관리자 계정] 테이블 생성 권한 부여 + 객체 생성 공간 할당
GRANT CREATE TABLE TO hong_gil_dong;

ALTER USER hong_gil_dong DEFAULT TABLESPACE SYSTEM QUOTA UNLIMITED ON SYSTEM;

-- 7) [사용자 계정] 테이블 생성 -> 성공
  • ROLE : 권한의 묶음
    → 묶어둔 권한(ROLE)을 특정 계정에게 부여 → 해당 계정은 특정 권한을 가진 역할을 갖게 됨
  • ROLE을 사용하면 한 번에 많은 권한을 부여하거나 회수할 수 있음
    1) CONNECT : DB 접속 권한( == CREATE SESSION)
    → 담고 있는 권한은 1개이지만, 의미적으로 쉽게 사용하기 위해 사용함
-- [sys 관리자 계정]
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'CONNECT';

   2) RESOURCE : DB 사용을 위한 기본 객체 생성 권한 묶음

-- [sys 관리자 계정]
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'RESOURCE'; -- 테이블 생성 포함 8개

   - ROLE을 이용해서 샘플 계정에 다시 권한 부여

-- [sys 관리자 계정]
GRANT CONNECT, RESOURCE TO hong_gil_dong;
  • 객체 권한
    EX) hong_gil_dong 계정에서 father_hong 계정의 EMP 테이블 조회 시도

-- 1) [개별 이니셜 계정] father_hong 계정의 EMP 테이블 조회
SELECT * FROM EMPLOYEE; [조회 가능]

SELECT * FROM father_hong.EMPLOYEE; [조회 불가능] -- 해당 테이블(객체) 조회 권한 없음

-- 2) [father_hong 계정] 개별 이니셜 계정에 EMP 테이블 조회 권한 부여
GRANT SELECT ON EMPLOYEE TO hong_gil_dong;

-- 3) [개별 이니셜 계정] 다시 EMP 테이블 조회
SELECT * FROM father_hong.EMPLOYEE;

-- 4) [father_hong 계정] 부여했던 SELECT 권한 회수
REVOKE SELECT ON EMPLOYEE FROM hong_gil_dong;

-- 5) [개별 이니셜 계정] 다시 EMP 테이블 조회
SELECT * FROM father_hong.EMPLOYEE; -- 조회 실패

'SQL > 기본 개념' 카테고리의 다른 글

VIEW / SEQUENCE / INDEX  (0) 2024.12.16
DDL (DATA DEFINITION LANGUAGE) _ 데이터 정의 언어  (0) 2024.12.16
DML (Data Manipulation Language) _ 데이터 조작 언어  (0) 2024.12.16
SUBQUERY(서브쿼리)  (0) 2024.12.16
JOIN  (0) 2024.12.16