TODAY I LEARNED 0810

doyeon kim·2023년 8월 10일

DB

목록 보기
4/8

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;

0개의 댓글