DCL (DATA CONTROL LANGUAGE) : 데이터를 다루기 위한 권한을 다루는 언어
계정에 DB, DB객체에 대한 접근 권한을 부여(GRANT) 하고
회수(REVOKE) 하는 언어
* 권한의 종류
1. 시스템 권한 : DB접속, 객체 생성 권한
CREATE SESSION: 데이터베이스 접속 권한
CREATE TABLE: 테이블 생성 권한
CREATE VIEW: 뷰 생성 권한
CREATE SEQUENCE: 시퀀스 생성권한
CREATE PROCEDURE: 함수 생성 권한
CREATE USER: 사용자(계정)생성 권한
DROP USER: 사용자(계정) 삭제 권한
2.객체 권한 : 특정 객체를 조작할 수 있는 권한
권한 종류 ------------------- 설정 객체
SELECT ------------------- TABLE,VIEW,SEQUENCE
INSERT ------------------- TABLE,VIEW
UPDATE ------------------ TABLE,VIEW
DELETE ------------------- TABLE,VIEW
ALTER(변경) -------------- TABLE,SEQUENCE
REFERENCES ------------- TABLE
INDEX -------------------- TABLE
EXECUTE ----------------- PROCEDURE
USER - 계정(사용자)
관리자 계정 : 데이터베이스의 생성과 관리를 담당하는 계정
모든 권한과 책임을 가짐
SYS: 최고관리자, SYSTEM: SYS보다 권한 몇개 제외된 관리자
사용자 : 데이터베이스에 대하여 질의 객신,보고서 작성 등의
작업을 수행하는 계정으로 업무에 필요한 최소한의 권한만 가짐
EX) kh,workbook
=======================================================
--1 SYS 사용자 계정 생성
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
-- -> 예전 SQL 방식 허용(계정명 간단하게 작성 가능)
-- 작성법: CREATE USER 사용자명 IDENTIFIED BY 비밀번호
CREATE USER kdy IDENTIFIED BY 1998;
-- 2. 새 연결 추가
-- 그러나 이 상태로 연결 시도하면 권한 문제로 로그온 거절됨
-- 3. 접속 권한 부여**
-- 방법: GRANT 권한,권한,... TO 사용자명;
GRANT CREATE SESSION TO kdy; -- 이러면 연결됨
--5. 만든 계정으로 접속하여 테이블 생성
CREATE TABLE TB_TEST(
PK_COL NUMBER PRIMARY KEY,
CONTENT VARCHAR2(100)
);
-- 이러고 실행하면 권한이 불충분하여 실행 안됨
--> 테이블 생성 권한(CREATE TABLE 필요)
-- + 데이터를 저장할 수 있는 공간(TABLESPACE) 할당
-- 6. 테이블 생성 권한 + TABLESPACE 할당(다시 SYS로 접속해야됨)
GRANT CREATE TABLE TO kdy;
ALTER USER kdy DEFAULT TABLESPACE
SYSTEM QUOTA UNLIMITED ON SYSTEM;
-- 7. 다시 테이블 생성
CREATE TABLE TB_TEST(
PK_COL NUMBER PRIMARY KEY,
CONTENT VARCHAR2(100)
); --> 생성됨
-- ROLE(역할) : 권한 묶음
-- 묶어둔 권한을 특정 계정에 부여
-->해당 계정은 지정된 권한을 이용하여 특정 역할을 갖게 된다
--SYS로 접속하여 kdy계정에 CONNET,RESOURCE 부여
GRANT CONNECT, RESOURCE TO kdy;
--CONNECT : DB 접속 관련 권한을 묶어둔 ROLE
--RESOURCE :DB 사용을 위한 기본 객체 생성 권한을 묵어둔 ROLE
-- 객체 권한
-- kh/kdy 사용자 계정끼리 서로 객체 접근 권한 부여
-- 1. kdy로 접속하여 kh계정의 EMPLOYEE 테이블 조회
SELECT * FROM kh.EMPLOYEE; -- 접근 권한이 없어서 조회 불가
--2.kh 접속하여 kdy계정에 EMPLOYEE 테이블 조회 권한 부여
-- 객체 권한 부여 방법 : GRANT 객체권한 ON 객체명 TO 사용자명
GRANT SELECT ON EMPLOYEE TO kdy;
--> 3.다시 kdy 접속하여 조회 -> 조회됨
SELECT * FROM kh.EMPLOYEE;
--4. 권한 회수
--방법: kh 접속하여 REVOKE 객체권한 ON 객체명 FROM 사용자명;
REVOKE SELECT ON EMPLOYEE FROM kdy;
--> 5. 다시 kdy 접속하여 조회 -> 조회안됨
SELECT * FROM kh.EMPLOYEE;