< DCL : DATA CONTROL LANGUAGE >
데이터 제어 언어
계정에게 시스템권한 또는 객체접근권한을 부여(GRANT)하거나 회수(REVOKE)하는 구문
> 시스템 권한 : DB에 접근하는 권한, 객체들을 생성할 수 있는 권한
> 객체접근권한 : 특정 객체들을 조작할 수 있는 권한
* 시스템권한 종류
- CREATE SESSION : 접속 할 수 있는 권한
- CREATE TABLE : 테이블을 생성할 수 있는 권한
- CREATE VIEW : 뷰를 생성할 수 있는 권한
- CREATE SEQUENCE : 시퀀스를 생성할 수 있는 권한
... : 일부는 커넥트안에 포함돼있음!!!
-- 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;
-- DCL_SAMPLE 계정
CREATE TABLE TEST(
TEST_ID NUMBER,
TEST_NAME VARCHAR2(10)
);
-- CREATE TABLE 할 수 있는 권한이 없어서 문제 발생!
-- 3_1. CREATE TABLE 권한 받기
-- 3_2. TABLESPACE 할당 받기
-- (관리자 계정)
-- 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
DELECT TABLE, VIEW
...
[표현식]
GRANT 권한종류 ON 특정객체 TO 계정
KH계정에 있는 EMPLOYEE 테이불에 접근
--> 근데 조회 권한이 없음
-- (관리자 계정)
-- 4.SELECT ON KH.EMPLOYEE 권한부여
GRANT SELECT ON KH.EMPLOYEE TO SAMPLE;
-- (DCL_SAMPLE 계정)
-- 4. SELECT ON KH.EMPLOYEE 권한 부여받음
SELECT * FROM KH.EMPLOYEE;
-- (관리자 계정)
-- 5.INSERT ON KH.DEPARTMENT 권한부여
GRANT INSERT ON KH.DEPARTMENT TO SAMPLE;
-- (DCL_SAMPLE 계정)
-- 5. INSERT ON KH.DEPARTMENT 권한 부여받음
INSERT INTO KH.DEPARTMENT
VALUES('D0', '회계부', 'L1');
COMMIT; -- 커밋해야 들어감
< 롤 ROLE >
- 특정 권한들을 하나의 집합으로 모아놓은 것
CONNECT : 접속할 수 있는 권한, CREATE SESSION
RESOURCE : 특정 객체들을 생성할 수 있는 권한 CREATE TABLE, CREATE SEQUENCE...
GRANT RESOURCE, CONNECT TO 계정명;
CONNECT 와 RESOURCE에 포함된 권한조회하기
-- (관리자 계정)
SELECT *
FROM ROLE_SYS_PRIVS
WHERE ROLE IN ('CONNECT', 'RESOURCE')
ORDER BY 1;