DCL(데이터 제어 언어)
DCL : DATA CONTROL LANGUAGE
데이터 제어 언어
계정에게 시스템 권한 또는 객체접근권한을 부여(GRANT) 하거나 회수(REVOKE)하는 구문
- 시스템권한 : DB에 접근하는 권한, 객체들을 생성할 수 있는 권한
- 객체접근 권한 : 특정 객체들을 조작할 수 있는 권한
시스템 권한 종류
CREATE SESSION : 접속할 수 있는 권한
CREATE TABLE : 테이블을 생성할 수 있는 권한
CREATE VIEW : 뷰를 생성할 수 있는 권한
CREATE SEQUNCE : 시퀀스를 생성할 수 있는 권한
... : 일부는 커넥트 안에 포함돼어있음!! (없는것도 있다)
1. SAMPLE / SAMPLE 계정 생성
CREATE USER SAMPLE IDENTIFIED BY SAMPLE;
-- 상태: 실패 -테스트 실패: ORA-01045: user SAMPLE lacks CREATE SESSION privilege; logon denied
2. 접속을 위해 CREATE SESSION 권한 부여
GRANT CREATE SESSION TO SAMPLE;
3_1. 테이블을 생성할 수 있는 CREATE TABLE 권한부여
GRANT CREATE TABLE TO SAMPLE;
3_2. TABLESPACE 할당(SAMPLE 계정 변경)
ALTER USER SAMPLE QUOTA 2M ON SYSTEM;
객체 접근 권한 종류
특정 객체에 접근해서 조작할 수 있는 권한
권한종류 | 특정객체 |
SELECT | TABLE, VIEW, SEQUENCE |
INSERT | TABLE, VIEW |
UPDATE | TABLE, VIEW |
DELETE | TABLE, VIEW |
... |
[표현식]
GRANT 권한종류 ON 특정객체 TO 계정
GRANT SELECT ON KH.EMPLOYEE TO SAMPLE;
GRANT INSERT ON KH.DEPARTMENT TO SAMPLE;
GRANT CONNECT, RESOURCE TO 계정명;
롤 ROLE
특정권한들을 하나의 집합으로 모아놓은 것
CONNECT : 접속할 수 있는 권한 CREATE SESSION
RESOURCE : 특정 객체를 생성할 수 있는 권한 CREATE TABLE, CREATE SEQUENCE,..테이블 스페이스 할당
SELECT *
FROM ROLE_SYS_PRIVS
WHERE ROLE IN ('CONNECT', 'RESOURCE')
ORDER BY 1;
CREATE TABLE TEST(
TEST_ID NUMBER,
TEST_NAME VARCHAR2(10)
);
-- CREATE TABLE 할 수 있는 권한이 없어서 문제발생!
-- 3_1. CREATE TABLE 권한 받기
-- 3_2. TABLESPACE 할당 받기
SELECT * FROM TEST;
INSERT INTO TEST VALUES(10,'안녕');
-- CREATE TABLE 권한 받으면 테이블들 바로 조작 가능
--------------------------------------------------------------------------------
-- KH 계정에 있는 EMPLOYEE 테이블 접근
-- 조회 권한이 없음
-- 4. SELECT ON FROM KH.EMPLOYEE 권한 부여 받기
SELECT * FROM KH.EMPLOYEE;
-- 5. INSERT ON KH.DEPARTMENT 권한 부여받기
INSERT INTO KH.DEPARTMENT
VALUES('D0','회계부','L1');
ROLLBACK;