DATABASE

DCL(데이터 제어 언어)

mi-ni 2024. 1. 3. 11:00

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;