▶ 계정(사용자)
- 관리자 계정 : 데이터베이스의 생성과 관리를 담당하는 계정
모든 권한과 책임을 가지는 계정
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 |